Repository
intuit-techweek-nyc-hackathon-2026
Repo to be used for NYC AI/ML Hackathon - https://partiful.com/e/EstgcJd2gxjOPGIbPHmv
- File
- Purpose
- dataset/dataset-compressed.zip
- The data: train.csv , validation.csv , test.csv (unzip first).
- dataset/data_dictionary.csv
- Every column: name, type, description.
- dataset/intervention_queries.csv
- The ~900 queries for Deliverable C.
Specs
- FilePurpose
- dataset/dataset-compressed.zipThe data: train.csv , validation.csv , test.csv (unzip first).
- dataset/data_dictionary.csvEvery column: name, type, description.
- dataset/intervention_queries.csvThe ~900 queries for Deliverable C.
- dataset/cohort_week_definitions.csvcohort_week (1-13) -> calendar date ranges (for Deliverable B).
- dataset/submission_B_template.csvThe 169-row grid to fill for Deliverable B.
- submission_D_writeup_template.mdSkeleton for the Deliverable D writeup.
- validate_submission.pyRun this on your submission before uploading.
- requirements.txtThe (minimal) Python deps to read data + validate.
- columnmeaning
- applicant_idmatches the dataset
- decision1 = approve at the requested amount, 0 = decline
- predicted_pdyour PD point estimate in [0, 1] - required for everyone, including declines
- pd_lower_90lower bound of your 90% interval on predicted_pd
- pd_upper_90upper bound of your 90% interval
- columnmeaning
- cohort_weekorigination cohort 1-13 (from cohort_week_definitions.csv )
- loan_age_weeksloan age 1-13 weeks after origination
- cumulative_default_ratepredicted cumulative default fraction by day 7a , in [0, 1]
- cdr_lower_90 / cdr_upper_90your 90% interval bounds
- columnmeaning
- query_idmatches the queries file
- predicted_pd_cfyour post-intervention PD in [0, 1]
- pd_cf_lower_90 / pd_cf_upper_90your 90% interval bounds
README
SMB Underwriting Challenge - Participant Instructions
SUBMISSION LINKS:
Links SheetSTEP 0 (REQUIRED, DO THIS FIRST): Register your team
**Register here as early as possible: Form Link
You will not receive a submission link until you register. Don't leave this
to the last minute.Provide your team name and, for each member (1-4 members per team):
full name (required), email (required). After you
register, we email your team a private link where you upload your submission.
The challenge
You are a small-business lender. Using a historical book of loan applications,
build a model that (A) decides whom to fund, (B) forecasts how those loans
default over time, and (C) answers causal "what-if" questions - then defend your
reasoning in a short writeup (D).
What you get
Everything is in this folder. Start with the dataset guide:
dataset/README.md.
| File | Purpose |
|---|---|
dataset/dataset-compressed.zip |
The data: train.csv, validation.csv, test.csv (unzip first). |
dataset/data_dictionary.csv |
Every column: name, type, description. |
dataset/intervention_queries.csv |
The ~900 queries for Deliverable C. |
dataset/cohort_week_definitions.csv |
cohort_week (1-13) -> calendar date ranges (for Deliverable B). |
dataset/submission_B_template.csv |
The 169-row grid to fill for Deliverable B. |
submission_D_writeup_template.md |
Skeleton for the Deliverable D writeup. |
validate_submission.py |
Run this on your submission before uploading. |
requirements.txt |
The (minimal) Python deps to read data + validate. |
The four deliverables
You submit exactly four files, with exactly these names. Scoring is
automated by joining on these names and IDs, so a wrong name or a missing ID
means your submission cannot be scored.
A - submission_A_decisions.csv (your lending policy)
Your approve/decline decision plus your calibrated probability of default (PD)
for every applicant.
-
Rows: one per applicant in
validation.csv+test.csv(13,306 total). -
Columns:
column meaning applicant_idmatches the dataset decision1= approve at the requested amount,0= declinepredicted_pdyour PD point estimate in [0, 1]- required for everyone, including declinespd_lower_90lower bound of your 90% interval on predicted_pdpd_upper_90upper bound of your 90% interval -
Rule:
pd_lower_90 <= predicted_pd <= pd_upper_90on every row.
B - submission_B_trajectory.csv (the default-timing forecast)
This is not a single default number - it is the shape of how defaults
accumulate over the life of a loan, per origination cohort. It is what tells us
whether you modeled loan timing rather than just a yes/no classifier.
For each origination cohort week w (1-13) and loan age a weeks (1-13),
predict the cumulative fraction of your approved cohort-w loans that have
defaulted by day 7a.
-
Rows: the full 13 x 13 = 169 grid. Use
dataset/submission_B_template.csv:
overwrite the three prediction columns; do not change the grid itself. -
Columns:
column meaning cohort_weekorigination cohort 1-13 (from cohort_week_definitions.csv)loan_age_weeksloan age 1-13 weeks after origination cumulative_default_ratepredicted cumulative default fraction by day 7a, in[0, 1]cdr_lower_90/cdr_upper_90your 90% interval bounds -
Rules:
cdr_lower_90 <= cumulative_default_rate <= cdr_upper_90, and within
each cohort thecumulative_default_ratemust be non-decreasing as age
increases (cumulative rates can only go up). -
Example row:
cohort_week=3, loan_age_weeks=4, cumulative_default_rate=0.05
means "5% of my approved week-3 loans defaulted within the first 28 days."
C - submission_C_counterfactuals.csv (the causal what-if)
dataset/intervention_queries.csv lists ~900 queries, each
(query_id, applicant_id, feature_name, intervention_value). For each query,
predict the applicant's PD if that one feature were set to that value by
intervention, holding everything else fixed - i.e. do(feature = value).
-
Rows: one per
query_idinintervention_queries.csv. -
Columns:
column meaning query_idmatches the queries file predicted_pd_cfyour post-intervention PD in [0, 1]pd_cf_lower_90/pd_cf_upper_90your 90% interval bounds -
Rule:
pd_cf_lower_90 <= predicted_pd_cf <= pd_cf_upper_90.
D - submission_D_writeup.pdf (the technical writeup)
A short writeup defending your methodology. Human-reviewed; reviewers grade on
substance, not polish.
- Start from
submission_D_writeup_template.md,
fill in each section, then export to PDF namedsubmission_D_writeup.pdf. - Format (enforced): max 4 pages of body (excluding references), >=11pt
font, >=0.75 inch margins. Content past page 4 is truncated for review. - Required sections, in this order:
- Problem framing & assumptions violated
- Methodology
- Causal reasoning & counterfactual methodology
- Calibration & uncertainty quantification
- Limitations & what we'd do differently
- Section 3 (causal reasoning - distinguishing observational from interventional
prediction, and how you'd defend your drivers to a regulator) carries the most
weight.
How you're scored (high level)
The A/B/C files are scored automatically; the writeup is reviewed by humans:
- Portfolio profitability from your approve/decline decisions (A).
- Cohort-timing accuracy of your trajectory forecast (B).
- Calibration of your 90% intervals (A and B).
- Counterfactual accuracy of your what-if predictions (C).
- Technical writeup (D).
We deliberately do not publish the exact scoring weights or formulas.
Submission checklist
-
Register on the Google Form (Step 0) early - your private upload link is
emailed to your team. -
Unzip and explore the dataset (
dataset/). -
Build your four files with the exact names above. Use
submission_B_template.csvfor B andsubmission_D_writeup_template.mdfor D. -
Put all four files flat in one folder (no subfolders).
-
Validate until it prints
PASS:pip install -r requirements.txt python validate_submission.py path/to/your_submission_folder -
Upload the four files to your team's private link from the email. Done.
Hard requirements (read this)
- Exact file names, exactly as listed above. A typo means your file is not
found and not scored. - Flat folder - the four files directly in one folder, no nesting.
validate_submission.pymust printPASS. Format, naming, ID-coverage,
range, and monotonicity mismatches are caught here. Because scoring for some deliverables are objective and fully
automated, a submission that does not pass the validator will be disqualified.