Skip to main content

Revealed preference analysis at scale — rationality scores, efficiency indices, and utility recovery. Rust engine, Python interface.

Project description

PrefGraph

Rationality scores for every user, at scale. Rust engine, Python interface.

PyPI Documentation License: MIT

pip install "prefgraph[datasets]"

Quick Example

Score how consistently each user's choices align with rational utility maximization. Paste and run:

from prefgraph.datasets import load_demo
from prefgraph.engine import Engine

users = load_demo()  # 100 synthetic consumers, no download needed
engine = Engine(metrics=["garp", "ccei", "mpi", "harp", "hm"])
results = engine.analyze_arrays(users)

for r in results[:5]:
    print(r)
EngineResult: [+] GARP-consistent  ccei=1.0000  hm=15/15  (42us)
EngineResult: [-] 3 violations  ccei=0.8472  mpi=0.0231  hm=12/15  (38us)
EngineResult: [+] GARP-consistent  ccei=1.0000  hm=15/15  (35us)
...

Every score is a feature. Use them for fraud detection, user segmentation, A/B testing, churn prediction, or personalization.

Your Data

Have a pandas DataFrame? One line:

import prefgraph as rp

# Transaction logs (one row per item per time)
results = rp.analyze(df, user_col="user_id", item_col="product",
                     cost_col="price", action_col="quantity", time_col="week")

# Wide format (one row per observation, items as columns)
results = rp.analyze(df, user_col="user_id",
                     cost_cols=["price_A", "price_B"],
                     action_cols=["qty_A", "qty_B"])

# Menu/click data
results = rp.analyze(df, user_col="user_id",
                     menu_col="shown_items", choice_col="clicked")

Returns a pandas DataFrame with one row per user. Customize with metrics=["garp", "ccei", "mpi", "hm"]. Handle missing data with nan_policy="drop".

Scores

Score Field What it measures Range
Consistency is_garp Are choices rationalizable? (GARP) bool
Efficiency ccei How close to perfectly rational? (Afriat) 0-1
Exploitability mpi Value left on the table per choice (Karp cycle) 0-1
Homotheticity is_harp Do preferences scale with budget? bool
Noise fraction hm_consistent/hm_total Fraction of rationalizable choices (Houtman-Maks) 0-1
Utility recovery utility_success Can latent utility be reconstructed? (Afriat LP) bool
Per-obs efficiency vei_mean Average efficiency across observations (Varian) 0-1

Which API?

Engine Function API
Use case Score thousands of users Deep-dive one user
Speed 10,000+ users/sec (Rust) Single-user
Returns EngineResult (flat scores) GARPResult, AEIResult, etc. (matrices, cycles, graphs)
Metrics 7 (garp, ccei, mpi, harp, hm, utility, vei) + network 30+ algorithms
Input list[(prices, quantities)] BehaviorLog

Engine for batch scoring. Function API when you need violation details, observation/item graphs, or advanced tests:

from prefgraph import BehaviorLog, validate_consistency, compute_integrity_score
session = BehaviorLog(cost_vectors=prices, action_vectors=quantities)
garp = validate_consistency(session)       # GARPResult with violation cycles, matrices
ccei = compute_integrity_score(session)    # AEIResult with binary search details

4 Choice Categories

                Test (bool)     Score (0-1)     Recover (vector)  Structure (bool)
Budget          GARP, WARP      CCEI, MPI, HM   Utility, CV/EV    HARP, Separability
Discrete        SARP, RUM LP    HM (menu)        Ordinal utility   Congruence
Production      Prod GARP       Prod CCEI        Tech efficiency   Cost minimization
Intertemporal   Exp discount    —                Discount delta    Quasi-hyperbolic
Category Input format Example domain
Budget (prices T×K, quantities T×K) E-commerce, grocery, food delivery
Discrete (menus, choices) or (menus, frequencies) Surveys, A/B tests, recommendations
Production (input_p, input_q, output_p, output_q) Supply chain, manufacturing
Intertemporal (amounts, dates, chosen) Subscriptions, savings, loyalty

Performance

The Rust engine (rpt-core) handles graph algorithms and LP solving via Rayon thread pool. Python handles I/O and the user-facing API.

Users Metrics Time Throughput
1,000 5 0.1s 10,000/s
10,000 5 2s 5,000/s
100,000 5 20s 5,000/s

18-100x faster than pure Python. Memory stays bounded via streaming chunks.

Documentation

Full docs — examples, theory, API reference, application case studies.

7-dataset benchmark — 167K users, 15 tasks. RP features add 0–0.7% AUC over RFM baselines.

15 dataset loaders — Dunnhumby, Instacart, H&M, Taobao, and 11 more real-world datasets.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prefgraph-0.5.8.tar.gz (361.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

prefgraph-0.5.8-cp313-cp313-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.13Windows x86-64

prefgraph-0.5.8-cp313-cp313-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

prefgraph-0.5.8-cp313-cp313-macosx_11_0_arm64.whl (4.3 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

prefgraph-0.5.8-cp313-cp313-macosx_10_12_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

prefgraph-0.5.8-cp312-cp312-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.12Windows x86-64

prefgraph-0.5.8-cp312-cp312-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

prefgraph-0.5.8-cp312-cp312-macosx_11_0_arm64.whl (4.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

prefgraph-0.5.8-cp312-cp312-macosx_10_12_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

prefgraph-0.5.8-cp311-cp311-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.11Windows x86-64

prefgraph-0.5.8-cp311-cp311-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

prefgraph-0.5.8-cp311-cp311-macosx_11_0_universal2.whl (4.3 MB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

prefgraph-0.5.8-cp311-cp311-macosx_11_0_arm64.whl (4.3 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

prefgraph-0.5.8-cp311-cp311-macosx_10_12_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

prefgraph-0.5.8-cp310-cp310-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.10Windows x86-64

prefgraph-0.5.8-cp310-cp310-manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

prefgraph-0.5.8-cp310-cp310-macosx_11_0_arm64.whl (4.3 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

prefgraph-0.5.8-cp310-cp310-macosx_10_12_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file prefgraph-0.5.8.tar.gz.

File metadata

  • Download URL: prefgraph-0.5.8.tar.gz
  • Upload date:
  • Size: 361.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for prefgraph-0.5.8.tar.gz
Algorithm Hash digest
SHA256 82a8fd4284c6caf828507ef984522544ee2aa7b41c9f1994a7967e23e8fc2006
MD5 78a646e47e6a1472f19bbfa4e4303d4f
BLAKE2b-256 b1ea14e04b04245cd2f26afa4fc497e87a31271948a82bf950a74309a33a0ea2

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fca381b8c5a526529b6e6befc1b67a4e38b917ef7afc8a4f86beb5904a2302f0
MD5 af475c2ef428b3f20724378b785c0c67
BLAKE2b-256 65b3c9071ef79cdb3149f1194d273f217f98708b66357a2ec89be0c7aeb0f116

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 21a4eb25ffbb06d6456dd64d125263f07b869e251c654a4b7bb1b2e832e0e331
MD5 7da407563b8c9b51a18d1536d23835f5
BLAKE2b-256 b0cf0610488e2d15ef3e40a5cbb95f9b3b0cf9edec3b1f20f1e4a1d02f5b2a3f

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b3929cd7262bb8cd16d622b2009513338b5253e590c3abc0346e648b6819ffbb
MD5 22b6c6f54e729484129cd4f980ec0e07
BLAKE2b-256 bcccdee81c0e0d73b62600adce8d690e22fc0b770845cf1c28f36cfd5fe3a015

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0e922dc6cbabcd46d517bd06a4654a38fc2ced47c9b89776e5982adc3a8db79f
MD5 6691116a1f0c051ddb26a4054de59020
BLAKE2b-256 d0f05274e52fd3b3cc7cebf2b8755421fe46cb284e46cf14a34c0bcb8bef2941

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bcb72dfdc5317e2d10cf3af2fea65946b019217a6a3e64b5e1d8bed5d2fe7dcb
MD5 21fa644dd93f9222387fbf6b24260cbb
BLAKE2b-256 95027131036948fe7ad4e6b52154b280673226b4f2c0d40ea4820e95ed573bc6

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b6ab7e8f3397fd9cedea3b7af9ac055dc29b5d3b8b7127571586dfe366038848
MD5 92d8cc8c81f2022683385fec69cbb17e
BLAKE2b-256 0ca96c417b9171c2252f514656b4d7ae7ecfe8b3b3013e6df1857e7a22b5689c

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9883af08b2ffc31ac4b7077313cbe7f757365ab372b1f8b1abf3b471f9b85160
MD5 457d85d5ea31264c806d7e72bdffd187
BLAKE2b-256 7483f17008ab1333ef4715c96fd8a98067ca0dd77bb0c2ffcc86acff7e01a149

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 802487d17e1818bc5f500ebf56899900e056695cd7e4a31b5d0b8e2ed0f04538
MD5 d62798b15fdf53d77c8643ef06ded031
BLAKE2b-256 ba76476117427f8c1d7a05bd81c5383112a1ac709aeb7b51a046069b9ac87e8e

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a72f4b153f463b7989f601fed7cb3c514c06a47e5c55a667bc88618353562998
MD5 ab74793dec1a005d19eb1bb800bf1580
BLAKE2b-256 8527ff53c1b84f0887bb1fa8b9dceebc03d0d17cd391209c3cd5f1b95e39613d

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b44cb62a17df2f4cfc7de7a2a816a81626622c5922f2d5c9cf7b2412dacb3fd4
MD5 b542e30fa5d04211bb5e3f0e7cd8f540
BLAKE2b-256 fedbc0d5042a27315157368091dadfaa806b1ccac5a41471e4f44b383241008a

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 27a53cfa5bcc3e58d8807e60d953cc057087907f7112cd551f977e0180abefc6
MD5 626c9c6b7f216e407f6000bb47199d87
BLAKE2b-256 97a1702aac2284749e5e146970e45c86fc3a5171d98b5aa3ad710be86b7d528e

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 66af2cea5871ebe73fa03b5360031c8b5da1409cf3e2103535f0944106f997c9
MD5 b2de89ed01a64a1f66110526b98204ae
BLAKE2b-256 4756700caecec53e853e8950e7d9e4efb1071eb86e43dc156b0963bca9b2f7bd

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6237095e2c01926e32a6e1ce682eeae970088c212cc981ff0aa24ab7fe1b33c8
MD5 fcde511c506bc4a31bb395feff550cc0
BLAKE2b-256 95324038c358bdc8ef37b160fe09328e178df1f5adb1247acc0d2244dba6fbba

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 99076c94155bb4d3426725c0d9461f500cfe685f47fb74c8230761d11225403a
MD5 623896fb1df32eb6fb9cbacc37cb2674
BLAKE2b-256 ebd66a71e29ef18b64a02b709484dd7bf1dbdb33c95b32482d4f7080830e8fbb

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c77a3776d1889d02ee4e37b7e4f51f4dc5993ccaa3f8e3c98c64d8d35e1f9d32
MD5 13711d981cc70d09533cd008854ca30a
BLAKE2b-256 a23446932b495238269928b4ebd4cb32a6ee65895624d9b2c95b02c5d0591921

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ef1b749d32a383cc96f89d14955437dbbcb7135b12781ee9a7d5c0cb94b3e1b4
MD5 e8147e420f54c7305ab58fb2b998f9d4
BLAKE2b-256 aaaff37a52d2e9c2ac0a30014062c3484ced520c53b21b48196a82ef3b3d70dc

See more details on using hashes here.

File details

Details for the file prefgraph-0.5.8-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for prefgraph-0.5.8-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7d8e2c8bf7e514239253ed2f1982c7bb623405b26671f425c26241dff06ba95b
MD5 225bb798f4f9d54a890387da1aa82609
BLAKE2b-256 6301fd1856bf9e97899c461c881eb09fc72a69eb9f620956f5b7860eabe73551

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page