Skip to main content

The Deterioration-Allocation Index: A framework for health inequality evaluation

PyPI - Python Version PyPI - Package Status PyPI - Latest Release PyPI - Wheel PyPI - License Ruff

Coverage Tests Passing Lines of Code Percentage Comments Snyk Package Health

This repository implements a DA-AUC (deterioration-allocation area under curve) metric for quantifying inequality between patient groups (a) embedded in datasets; or (b) induced by statistical / ML / AI models. This is analogous to ROC-AUC for assessing performance of prediction models.

Methodology

We define and quantify health inequalities in a generic resource allocation scenario using a novel deterioration-allocation framework. The basic idea is to define two indices: a deterioration index and an allocation index. The allocation index is to be derived from the model of interest.

Conceptually, models used in real-world contexts can be abstracted and thought of as resource allocators, predicting for example the probability of Intensive Care Unit (ICU) admission. Note that the models do not need to be particularly designed to allocate resources, for example, risk prediction of cardiovascular disease (CVD) among people with diabetes is also a valid index for downstream resource allocation. Essentially, a resource allocator is a computational model that takes patient data as input and outputs a (normalised) score between 0 and 1. We call this score the allocation index.

The deterioration index is a score between 0 and 1 to measure the deterioration status of patients. It can be derived from an objective measurement for disease prognosis (i.e., a marker of prognosis in epidemiology terminology), such as extensively used comorbidity scores or biomarker measurements like those for CVDs.

Figure 1

Once we have defined the two indices, each patient can then be represented as a point in a two-dimensional space of <allocation index, deterioration index>. A sample of the group of patients is then translated into a set of points in the space, for which a regression model can be fitted to approximate a curve in the space.

The area between the two curves is then the deterioration difference between their corresponding patient groups, quantifying the inequalities induced by the allocator, i.e., the model that produces the allocation index. The curve with the larger area under it represents the patient group which would be unfairly treated if the allocation index was to be used in allocating resources or services: a patient from this group would be deemed healthier than a patient from another group who is equally ill.

See the paper for more details: Quantifying Health Inequalities Induced by Data and AI Models.

Installation of the daindex python package

pip install daindex

Advanced install (for developers)

After cloning the repository, you can install the package for local development using uv:

uv sync
uv run pre-commit install

Usage

  1. Create sample data for testing

    import pandas as pd
    import numpy as np
    n_size = 100
    
    # generate female data
    female_mm = [int(m) for m in np.random.normal(3.2, .5, size=n_size)]
    df_female = pd.DataFrame(dict(mm=female_mm, gender=['f'] * n_size))
    df_female.head()
    
    # generate male data
    male_mm = [int(m) for m in np.random.normal(3, .5, size=n_size)]
    df_male = pd.DataFrame(dict(mm=male_mm, gender=['m'] * n_size))
    df_male.head()
    
    # merge dataframes
    df = pd.concat([df_female, df_male], ignore_index=True)
    
  2. Import the compare_two_groups function:

    from daindex.util import compare_two_groups
    
  3. Run inequality analysis between the female and male groups:

    compare_two_groups(
       df[df.gender=='f'], df[df.gender=='m'], 'mm',
       'female', 'male', '#Multimorbidity', 3, is_discrete=True
    )
    

    You will see something similar to.

    ({'overall-prob': 0.9999, 'one-step': 0.7199, 'k-step': 0.054609, '|in_matrix|': 100},
    {'overall-prob': 0.9999, 'one-step': 0.42, 'k-step': 0.03195, '|in_matrix|': 100},
    0.7092018779342724)
    

    The result means the inequality of female vs male is 0.709.

Tutorials

  • We provide a basic use case for the deterioration-allocation index: basic_tutorial.ipynb.
  • A more complex tutorial around the MEPS dataset is under construction: meps_tutorial.ipynb.
  • More tutorials will be added, including those for replicating studies on HiRID and MIMIC datasets.

Contact

honghan.wu@ucl.ac.uk or h.wilde@ucl.ac.uk

Reference

If using this package in your own work, please cite:

Honghan Wu, Aneeta Sylolypavan, Minhong Wang, and Sarah Wild. 2022. ‘Quantifying Health Inequalities Induced by Data and AI Models’. In IJCAI-ECAI, 6:5192–98. https://doi.org/10.24963/ijcai.2022/721.

Useful links: slides, recording, arxiv, proceedings.

Metadata

Release files for daindex 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for daindex 0.10.0
File Size Uploaded
daindex-0.10.0.tar.gz 27.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for daindex 0.10.0
File Interpreter ABI Platform
daindex-0.10.0-py3-none-any.whl Python 3 none any Details

Total release size: 51.1 kB

Release files / daindex-0.10.0.tar.gz

Download URL daindex-0.10.0.tar.gz
Size 27.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2d08985deca6234abe8313484c1f4e6479cb6ffaf242a03ab1b1fa85a74a87c7
BLAKE2b-256 checksum
How to use checksums
bba01aca724d30042cbf9261f2fea87e070fb527529d5054d10d3c18cd8d89a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2025.

Transparency log

Release files / daindex-0.10.0-py3-none-any.whl

Download URL daindex-0.10.0-py3-none-any.whl
Size 23.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce8ccfb4cf2b4f794dd77d531579cf04b8f3a438c646511ae4daa21545820902
BLAKE2b-256 checksum
How to use checksums
515961fab5367d592c8348acce390cdc115a26879e985be98c5ceb34eeb62311
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.10.0 This release

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.0

2 release files

0.6.4

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page