This document is the concrete data request to send to a pilot NGO before a RetainAI shadow deployment.
We need one historical beneficiary bundle that supports:
- temporal backtesting
- cohort and program-segment validation
- fairness auditing
- threshold tuning for field follow-up capacity
This is not the full production integration request. It is the minimum package required to decide whether the model is trustworthy enough for shadow mode.
Provide two tabular files, .csv or .xlsx.
One row per beneficiary.
Required columns:
external_idnameregionenrollment_date
Strongly recommended columns:
statusdropout_datecompletion_datecohortphasegenderhousehold_typehousehold_sizepmt_scorefood_insecurity_indexdistance_to_service_kmpreferred_contact_phonepreferred_contact_channelnotesmodeling_consent_statusopted_out
One row per beneficiary interaction, attendance event, payment collection, visit, or outreach attempt.
Required columns:
external_idevent_dateevent_type
Strongly recommended columns:
successfulresponse_receivedsourcenotes
For a meaningful first validation run, aim for:
- at least
500beneficiaries - at least
200labeled dropouts - at least
2cohorts or waves - at least
90days of usable event history for most beneficiaries - explicit dropout or completion dates where possible
If the bundle is smaller than this, RetainAI can still run the backtest, but the result should be treated as exploratory only.
The best first bundle usually covers exactly one program in one country, not the whole organization.
Preferred scope:
- one program type
- one country team
- 12 to 24 months of history
- one consistent operational workflow
This keeps the first validation interpretable.
Before transfer:
- remove direct identifiers not required for follow-up modeling
- do not include national ID numbers
- do not include exact home addresses
- do not include free-text notes that contain highly sensitive medical, legal, or protection details unless they are already approved for analytical use
If phone numbers are included, use a restricted-transfer channel and document why they are necessary. For backtesting only, phone numbers are usually not needed.
Export:
- enrollment form submissions
- follow-up form submissions
- attendance or visit form submissions
If possible, include a derived status column in the beneficiary export rather than forcing RetainAI to infer it from raw forms alone.
Export:
- tracked entity roster
- enrollment dates
- program stage events
- completion / cancellation status
Export:
- contacts or program participants
- program engagements
- attendance / service-delivery events
- closed-lost / completed equivalents
Once the bundle is available:
- Run
scripts/validate_partner_bundle.py - Fix any schema or coverage issues
- Run
scripts/run_partner_readiness_suite.py - Review:
- overall rolling backtest
- per-program stability
- per-cohort stability
- fairness alerts
python scripts/validate_partner_bundle.py ^
--beneficiaries-file data/partner/beneficiaries.csv ^
--events-file data/partner/events.csv ^
--output-json data/partner/validation.json ^
--output-md data/partner/validation.mdpython scripts/run_partner_readiness_suite.py ^
--beneficiaries-file data/partner/beneficiaries.csv ^
--events-file data/partner/events.csv ^
--program-name "Pilot Cash Transfer" ^
--program-type "Cash Transfer" ^
--country Kenya ^
--output-json data/partner/readiness-suite.json ^
--output-md data/partner/readiness-suite.mdDo not enable live decision-support use only because the overall backtest looks good.
The bundle is ready for shadow mode only if:
- the bundle validator does not report blocking errors
- the overall rolling backtest is at least
ready_for_shadow_mode - no major program or cohort segment collapses
- fairness alerts are reviewed and judged acceptable for the intended pilot