tests/test.sh exit code (0 → resolved); the classification below is post-hoc and cannot change it.ls -la /workspace/app/ && ls -la /workspace/
total 424 drwxrws--- 2 h2tagent h2tagent 4096 Jun 1 08:53 . drwxrws--- 4 h2tagent h2tagent 4096 Jun 1 08:53 .. -rw-rw---- 1 h2tagent h2tagent 1725 Jun 1 08:20 dataset_manifest.json -rw-rw---- 1 h2tagent h2tagent 423783 Jun 1 08:20 lgd_workouts_source.csv total 19 drwxrws--- 4 h2tagent h2tagent 4096 Jun 1 08:53 . drwxr-xr-x 28 root root 4096 Jun 1 09:33 .. -rw-rw---- 1 h2tagent h2tagent 2821 Jun 1 08:20 analysis.R drwxrws--- 2 h2tagent h2tagent 4096 Jun 1 08:53 app drwxrws--- 2 h2tagent h2tagent 4096 Jun 1 08:53 output
cat /workspace/app/dataset_manifest.json
{
"dataset_name": "Defaulted-loan workout panel for Loss Given Default modelling",
"source": "Calibrated to Lending Club historical loan-level disclosures of defaulted accounts and their post-default workout ledger (https://www.lendingclub.com/info/statistics.action , historical bulk files).",
"license": "Synthetic but matches the Lending Club workout schema for grading.",
"columns": {
"loan_id": "Anonymous loan identifier.",
"grade": "Lending Club grade A-G assigned at origination.",
"purpose": "Borrower-stated loan purpose.",
"home_ownership": "RENT / OWN / MORTGAGE.",
"principal_at_default": "Outstanding principal at the moment of default (USD).",
"default_month": "Months from origination to default.",
"workout_months_observed": "Months of post-default observation in the panel.",
"time_to_resolution": "Months from default to terminal resolution (recovery curve flat-lines).",
"is_resolved": "1 if workout_months_observed >= time_to_resolution; else 0 (right-censored workout).",
"recovered_amount": "Cumulative dollars recovered as of the as-of date (USD).",
"annual_inc": "Borrower annual income at origination."
},
"definitions": {
"lgd": "LGD = 1 - recovered_amount / principal_at_default , only valid when is_resolved == 1.",
"censoring": "Rows with is_resolved == 0 are right-censored: their LGD is incompletely observed. Censored rows have partial recovery, so recovered_amount understates the true terminal recovery , a naive mean of recovered/principal is biased downward, and therefore LGD = 1 - recovered/principal is biased upward (naive overestimates true LGD). Restrict to resolved workouts or model the cure mechanism."
}
}cat /workspace/analysis.R
#!/usr/bin/env Rscript
# LGD analysis , DRAFT. Audit and finish.
suppressPackageStartupMessages({
library(readr); library(dplyr); library(tidyr); library(jsonlite); library(ggplot2)
})
LGD_PATH <- Sys.getenv("LGD_PATH", "/workspace/app/lgd_workouts_source.csv")
OUT <- Sys.getenv("LGD_OUTPUT_DIR", "/workspace/output")
dir.create(OUT, showWarnings = FALSE, recursive = TRUE)
df <- read_csv(LGD_PATH, show_col_types = FALSE)
# Naive LGD over all rows (this is the biased baseline)
df <- df %>% mutate(observed_lgd = 1 - recovered_amount / principal_at_default)
naive_lgd <- mean(df$observed_lgd)
# "corrected" , but the draft uses ALL rows again, just trimming outliers
corrected_lgd <- mean(df$observed_lgd[df$observed_lgd > 0.0 & df$observed_lgd < 1.0])
# bootstrap on the wrong (full) dataset , and only 200 reps
set.seed(20260606)
boot <- replicate(200, mean(sample(df$observed_lgd, replace = TRUE)))
ci_lo <- quantile(boot, 0.025); ci_hi <- quantile(boot, 0.975)
bg <- df %>% group_by(grade) %>% summarise(corrected_lgd = mean(observed_lgd), .groups = "drop")
bp <- df %>% group_by(purpose) %>% summarise(corrected_lgd = mean(observed_lgd), .groups = "drop")
panel <- df %>% group_by(grade, purpose) %>%
summarise(n_total = n(), n_resolved = sum(is_resolved),
naive_lgd = mean(observed_lgd),
corrected_lgd = mean(observed_lgd), .groups = "drop")
write_csv(panel, file.path(OUT, "lgd_panel.csv"))
bias_diff <- naive_lgd - corrected_lgd
direction <- if (abs(bias_diff) < 0.05) "close" else if (bias_diff > 0) "materially_overestimates" else "materially_underestimates"
metrics <- list(
data_summary = list(n_total = nrow(df), n_resolved = sum(df$is_resolved),
n_censored = nrow(df) - sum(df$is_resolved),
share_resolved = mean(df$is_resolved)),
naive_lgd = list(value = naive_lgd),
corrected_lgd = list(value = corrected_lgd),
bootstrap_ci = list(ci_low = unname(ci_lo), ci_high = unname(ci_hi)),
lgd_by_grade = setNames(as.list(bg$corrected_lgd), bg$grade),
lgd_by_purpose = setNames(as.list(bp$corrected_lgd), bp$purpose),
bias_assessment = list(naive_minus_corrected = bias_diff, direction = direction)
)
write_json(metrics, file.path(OUT, "metrics.json"), auto_unbox = TRUE,
digits = 6, pretty = TRUE)
cat(paste0("Naive LGD: ", round(naive_lgd, 3),
"\nCorrected: ", round(corrected_lgd, 3),
"\nDirection: ", direction, "\n"),
file = file.path(OUT, "insights.md"))
write_json(list(figures = list()), file.path(OUT, "plot_contract.json"),
auto_unbox = TRUE, pretty = TRUE)
png(file.path(OUT, "fig1_lgd_by_grade.png"), width = 600, height = 400); plot.new(); dev.off()
png(file.path(OUT, "fig2_naive_vs_corrected.png"), width = 600, height = 400); plot.new(); dev.off()head -3 /workspace/app/lgd_workouts_source.csv
loan_id,grade,purpose,home_ownership,principal_at_default,default_month,workout_months_observed,time_to_resolution,is_resolved,recovered_amount,annual_inc LC0000000,C,small_business,MORTGAGE,9248.9,12,16,8,1,2351.97,37618.14 LC0000001,A,debt_consolidation,RENT,14442.6,10,25,15,1,7783.99,135186.3
wc -l /workspace/app/lgd_workouts_source.csv
6001 /workspace/app/lgd_workouts_source.csv
python3 -c "
import csv
with open('/workspace/app/lgd_workouts_source.csv') as f:
r = list(csv.DictReader(f))
print('N rows:', len(r))
print('grades:', sorted(set(x['grade'] for x in r)))
print('purposes:', sorted(set(x['purpose'] for x in r)))
resolved = [x for x in r if x['is_resolved']=='1']
print('n resolved:', len(resolved))
print('n unresolved:', len(r)-len(resolved))
import statistics
naive = [1 - float(x['recovered_amount'])/float(x['principal_at_default']) for x in r]
corrected = [1 - float(x['recovered_amount'])/float(x['principal_at_default']) for x in resolved]
print('naive mean:', statistics.mean(naive))
print('corrected mean:', statistics.mean(corrected))
"
N rows: 6000 grades: ['A', 'B', 'C', 'D', 'E', 'F', 'G'] purposes: ['credit_card', 'debt_consolidation', 'home_improvement', 'major_purchase', 'other', 'small_business'] n resolved: 3185 n unresolved: 2815 naive mean: 0.6770569995859103 corrected mean: 0.5651258837747273
python3 -c "
import csv
from collections import defaultdict
with open('/workspace/app/lgd_workouts_source.csv') as f:
r = list(csv.DictReader(f))
groups = defaultdict(list)
for x in r:
groups[(x['grade'], x['purpose'])].append(x)
for (g,p), rows in sorted(groups.items()):
n_total = len(rows)
n_resolved = sum(1 for x in rows if x['is_resolved']=='1')
print(f'grade={g} purpose={p} n_total={n_total} n_resolved={n_resolved}')
"
grade=A purpose=credit_card n_total=219 n_resolved=136 grade=A purpose=debt_consolidation n_total=564 n_resolved=297 grade=A purpose=home_improvement n_total=114 n_resolved=64 grade=A purpose=major_purchase n_total=67 n_resolved=35 grade=A purpose=other n_total=90 n_resolved=52 grade=A purpose=small_business n_total=86 n_resolved=44 grade=B purpose=credit_card n_total=321 n_resolved=165 grade=B purpose=debt_consolidation n_total=796 n_resolved=431 grade=B purpose=home_improvement n_total=144 n_resolved=72 grade=B purpose=major_purchase n_total=92 n_resolved=47 grade=B purpose=other n_total=147 n_resolved=76 grade=B purpose=small_business n_total=107 n_resolved=62 grade=C purpose=credit_card n_total=278 n_resolved=137 grade=C purpose=debt_consolidation n_total=689 n_resolved=376 grade=C purpose=home_improvement n_total=140 n_resolved=81 grade=C purpose=major_purchase n_total=86 n_resolved=38 grade=C purpose=other n_total=108 n_resolved=55 grade=C purpose=small_business n_total=88 n_resolved=46 grade=D purpose=credit_card n_total=215 n_resolved=115 grade=D purpose=debt_consolidation n_total=448 n_resolved=228 grade=D purpose=home_improvement n_total=120 n_resolved=67 grade=D purpose=major_purchase n_total=42 n_resolved=19 grade=D purpose=other n_total=87 n_resolved=51 grade=D purpose=small_business n_total=80 n_resolved=41 grade=E purpose=credit_card n_total=90 n_resolved=46 grade=E purpose=debt_consolidation n_total=256 n_resolved=132 grade=E purpose=home_improvement n_total=43 n_resolved=25 grade=E purpose=major_purchase n_total=33 n_resolved=18 grade=E purpose=other n_total=38 n_resolved=22 grade=E purpose=small_business n_total=34 n_resolved=21 grade=F purpose=credit_card n_total=56 n_resolved=29 grade=F purpose=debt_consolidation n_total=117 n_resolved=54 grade=F purpose=home_improvement n_total=22 n_resolved=7 grade=F purpose=major_purchase n_total=12 n_resolved=10 grade=F purpose=other n_total=25 n_resolved=10 grade=F purpose=small_business n_total=10 n_resolved=7 grade=G purpose=credit_card n_total=31 n_resolved=12 grade=G purpose=debt_consolidation n_total=56 n_resolved=32 grade=G purpose=home_improvement n_total=18 n_resolved=8 grade=G purpose=major_purchase n_total=9 n_resolved=6 grade=G purpose=other n_total=11 n_resolved=7 grade=G purpose=small_business n_total=11 n_resolved=4
command: create
path: /workspace/analysis.R
file_text: #!/usr/bin/env Rscript
# LGD analysis , defensible read on Lending Club defaulted-loans workout panel.
# ----------------------------------------------------------------------------
# Specification (see /workspace/app/dataset_manifest.json):
# Raw LGD = 1 - recovered_amount / principal_at_default,
# but this ratio is only *fully* observed for rows with is_resolved == 1.
# Censored rows (is_resolved == 0) have partial recovery, so their
# recovered_amount understates terminal recovery and their "observed" LGD
# overstates true LGD. A naive mean over all rows is therefore biased
# upward; the defensible point estimate restricts to resolved workouts.
# ----------------------------------------------------------------------------
suppressPackageStartupMessages({
library(readr)
library(dplyr)
library(tidyr)
library(jsonlite)
library(ggplot2)
})
LGD_PATH <- Sys.getenv("LGD_PATH", "/workspace/app/lgd_workouts_source.csv")
OUT <- Sys.getenv("LGD_OUTPUT_DIR", "/workspace/output")
dir.create(OUT, showWarnings = FALSE, recursive = TRUE)
# --- Load --------------------------------------------------------------------
df <- read_csv(LGD_PATH, show_col_types = FALSE)
# Row-level observed LGD (defined for every row, but only *valid* for resolved)
df <- df %>%
mutate(observed_lgd = 1 - recovered_amount / principal_at_default)
resolved <- df %>% filter(is_resolved == 1)
# --- Point estimates ---------------------------------------------------------
# Naive: biased baseline across the full panel (includes censored rows).
naive_lgd <- mean(df$observed_lgd)
# Corrected: restrict to fully-resolved workouts where LGD is observed.
corrected_lgd <- mean(resolved$observed_lgd)
# --- Paired bootstrap over resolved loans only (B = 1000) --------------------
# "Paired" = resample rows (pairs of recovered / principal), not the two
# columns independently.
n_res <- nrow(resolved)
res_lgd <- resolved$observed_lgd
B <- 1000L
set.seed(20260606)
boot_means <- numeric(B)
for (b in seq_len(B)) {
idx <- sample.int(n_res, n_res, replace = TRUE)
boot_means[b] <- mean(res_lgd[idx])
}
ci_low <- unname(quantile(boot_means, 0.025))
ci_high <- unname(quantile(boot_means, 0.975))
# --- Sub-population LGDs (corrected / resolved-only) -------------------------
lgd_by_grade_df <- resolved %>%
group_by(grade) %>%
summarise(corrected_lgd = mean(observed_lgd), .groups = "drop") %>%
arrange(grade)
lgd_by_purpose_df <- resolved %>%
group_by(purpose) %>%
summarise(corrected_lgd = mean(observed_lgd), .groups = "drop") %>%
arrange(purpose)
# --- Grade x Purpose panel ---------------------------------------------------
totals_panel <- df %>%
group_by(grade, purpose) %>%
summarise(
n_total = dplyr::n(),
n_resolved = sum(is_resolved),
naive_lgd = mean(observed_lgd),
.groups = "drop"
)
resolved_panel <- resolved %>%
group_by(grade, purpose) %>%
summarise(corrected_lgd = mean(observed_lgd), .groups = "drop")
panel <- totals_panel %>%
left_join(resolved_panel, by = c("grade", "purpose")) %>%
arrange(grade, purpose) %>%
select(grade, purpose, n_total, n_resolved, naive_lgd, corrected_lgd)
write_csv(panel, file.path(OUT, "lgd_panel.csv"))
# --- Bias assessment ---------------------------------------------------------
naive_minus_corrected <- naive_lgd - corrected_lgd
direction <- if (naive_lgd < corrected_lgd - 0.05) {
"materially_underestimates"
} else if (naive_lgd > corrected_lgd + 0.05) {
"materially_overestimates"
} else {
"close"
}
# --- metrics.json ------------------------------------------------------------
metrics <- list(
data_summary = list(
n_total = nrow(df),
n_resolved = as.integer(sum(df$is_resolved)),
n_censored = as.integer(nrow(df) - sum(df$is_resolved)),
share_resolved = mean(df$is_resolved)
),
naive_lgd = list(value = naive_lgd),
corrected_lgd = list(value = correcte
…[truncated]Existing file was successfully overwritten at /workspace/analysis.R
cd /workspace && rm -rf /workspace/output/* && Rscript analysis.R 2>&1
Naive LGD: 0.6771 Corrected LGD: 0.5651 95% CI: [0.5577, 0.5727] Direction: materially_overestimates
ls -la /workspace/output/
total 64 drwxrws--- 2 h2tagent h2tagent 4096 Jun 1 09:34 . drwxrws--- 4 h2tagent h2tagent 4096 Jun 1 09:34 .. -rw-r--r-- 1 h2tagent h2tagent 27387 Jun 1 09:34 fig1_lgd_by_grade.png -rw-r--r-- 1 h2tagent h2tagent 22803 Jun 1 09:34 fig2_naive_vs_corrected.png -rw-r--r-- 1 h2tagent h2tagent 611 Jun 1 09:34 insights.md -rw-r--r-- 1 h2tagent h2tagent 2592 Jun 1 09:34 lgd_panel.csv -rw-r--r-- 1 h2tagent h2tagent 773 Jun 1 09:34 metrics.json -rw-r--r-- 1 h2tagent h2tagent 907 Jun 1 09:34 plot_contract.json
cat /workspace/output/metrics.json
{
"data_summary": {
"n_total": 6000,
"n_resolved": 3185,
"n_censored": 2815,
"share_resolved": 0.530833
},
"naive_lgd": {
"value": 0.677057
},
"corrected_lgd": {
"value": 0.565126
},
"bootstrap_ci": {
"ci_low": 0.557675,
"ci_high": 0.572659
},
"lgd_by_grade": {
"A": 0.435298,
"B": 0.499192,
"C": 0.571508,
"D": 0.652621,
"E": 0.719296,
"F": 0.797467,
"G": 0.849548
},
"lgd_by_purpose": {
"credit_card": 0.591114,
"debt_consolidation": 0.548877,
"home_improvement": 0.542071,
"major_purchase": 0.610129,
"other": 0.545481,
"small_business": 0.625576
},
"bias_assessment": {
"naive_minus_corrected": 0.111931,
"direction": "materially_overestimates"
}
}cat /workspace/output/lgd_panel.csv
grade,purpose,n_total,n_resolved,naive_lgd,corrected_lgd A,credit_card,219,136,0.5607065958509241,0.45012049865070586 A,debt_consolidation,564,297,0.5702761415442725,0.4202599413316665 A,home_improvement,114,64,0.5292722852167128,0.4073998487935503 A,major_purchase,67,35,0.6368190733531681,0.5021729573367807 A,other,90,52,0.5730028339585355,0.4161251086238681 A,small_business,86,44,0.6524850156856171,0.501025517461768 B,credit_card,321,165,0.6650274867660854,0.5529570202359294 B,debt_consolidation,796,431,0.6046227193564916,0.4831736900891306 B,home_improvement,144,72,0.5957294070774534,0.4692244006760461 B,major_purchase,92,47,0.6660533581869653,0.5058966135004026 B,other,147,76,0.6134946055553012,0.4707940973640627 B,small_business,107,62,0.6406465639242245,0.5319930675458743 C,credit_card,278,137,0.6975732212004435,0.5846765821152625 C,debt_consolidation,689,376,0.6700856143560795,0.5627652371775993 C,home_improvement,140,81,0.6725210332547668,0.5523445244469769 C,major_purchase,86,38,0.7189961393361699,0.6135765359011776 C,other,108,55,0.6702128871263167,0.5494833684419389 C,small_business,88,46,0.7149621821285365,0.6290844602873757 D,credit_card,215,115,0.7655060220713419,0.6766756615218997 D,debt_consolidation,448,228,0.7371918264998432,0.6344644902504021 D,home_improvement,120,67,0.706739229484161,0.6234518380025803 D,major_purchase,42,19,0.7894081280303623,0.7084756218052387 D,other,87,51,0.6939151170291316,0.6058828728339123 D,small_business,80,41,0.8274598087266876,0.7660441640751415 E,credit_card,90,46,0.8077462377640657,0.7330477412383156 E,debt_consolidation,256,132,0.7862663620497375,0.7003007267441975 E,home_improvement,43,25,0.7541782779865313,0.6981705904655177 E,major_purchase,33,18,0.8385062029526982,0.7830152386610237 E,other,38,22,0.7946576919784877,0.73635573221014206 E,small_business,34,21,0.825301153364123,0.7612354523626295 F,credit_card,56,29,0.8654033610376749,0.8089172904120583 F,debt_consolidation,117,54,0.8459071231536545,0.7861061615750851 F,home_improvement,22,7,0.8708448206943532,0.7572663993839904 F,major_purchase,12,10,0.8568444820470749,0.8427265280385001 F,other,25,10,0.8579346748386366,0.8181945014303231 F,small_business,10,7,0.8268334441356919,0.7836012420916083 G,credit_card,31,12,0.9313126372886666,0.8967948452590078 G,debt_consolidation,56,32,0.8736372909633625,0.8295847885354636 G,home_improvement,18,8,0.8599317504304652,0.8133579562599889 G,major_purchase,9,6,0.8694264325104171,0.8167843285444563 G,other,11,7,0.871591124141334,0.8562888208527432 G,small_business,11,4,0.98019042346479,0.9772421282080737
cat /workspace/output/plot_contract.json
{
"figures": [
{
"name": "fig1_lgd_by_grade",
"series": [
{
"grade": "A",
"corrected_lgd": 0.435298
},
{
"grade": "B",
"corrected_lgd": 0.499192
},
{
"grade": "C",
"corrected_lgd": 0.571508
},
{
"grade": "D",
"corrected_lgd": 0.652621
},
{
"grade": "E",
"corrected_lgd": 0.719296
},
{
"grade": "F",
"corrected_lgd": 0.797467
},
{
"grade": "G",
"corrected_lgd": 0.849548
}
]
},
{
"name": "fig2_naive_vs_corrected",
"series": [
{
"estimator": "naive",
"value": 0.677057
},
{
"estimator": "corrected",
"value": 0.565126
}
]
}
]
}cat /workspace/output/insights.md
# Portfolio LGD , defensible read Across 6000 defaulted accounts (3185 resolved, 2815 right-censored; share resolved = 53.1%), the naive mean of 1 - recovered_amount / principal_at_default is 0.677, while the corrected (resolved-only) mean is 0.565 with a 95% paired-bootstrap CI of [0.558, 0.573]. The naive estimate **materially overestimates** the true LGD by 0.112 (naive - corrected = +0.112). Direction: `materially_overestimates`. Because censored workouts have partial recoveries, their partially-observed LGD overstates the terminal loss; restricting to `is_resolved == 1` removes that upward bias.
python3 -c " from PIL import Image for p in ['/workspace/output/fig1_lgd_by_grade.png','/workspace/output/fig2_naive_vs_corrected.png']: im = Image.open(p) print(p, im.size) "
/workspace/output/fig1_lgd_by_grade.png (720, 480) /workspace/output/fig2_naive_vs_corrected.png (720, 480)
grep -nE 'file\.copy|file\.rename|file\.link|file\.symlink|file\.append|system\(|system2\(|shell\(|pipe\(|saveRDS\(|writeBin\(|as\.raw\(|sink\(|readRDS\(|readBin\(|load\(' /workspace/analysis.R || echo "No forbidden functions found"No forbidden functions found
# Test that running twice works (no side effects issues) cd /workspace && rm -rf /workspace/output/* && Rscript analysis.R 2>&1 && echo "---- second run ----" && Rscript analysis.R 2>&1
Naive LGD: 0.6771 Corrected LGD: 0.5651 95% CI: [0.5577, 0.5727] Direction: materially_overestimates ---- second run ---- Naive LGD: 0.6771 Corrected LGD: 0.5651 95% CI: [0.5577, 0.5727] Direction: materially_overestimates
mkdir -p /tmp/hidden_output && LGD_OUTPUT_DIR=/tmp/hidden_output Rscript /workspace/analysis.R 2>&1 && ls /tmp/hidden_output/
Naive LGD: 0.6771 Corrected LGD: 0.5651 95% CI: [0.5577, 0.5727] Direction: materially_overestimates fig1_lgd_by_grade.png fig2_naive_vs_corrected.png insights.md lgd_panel.csv metrics.json plot_contract.json
# Final verification - check corrected_lgd is NOT NaN for any group with n_resolved > 0
python3 -c "
import csv, math
with open('/workspace/output/lgd_panel.csv') as f:
r = list(csv.DictReader(f))
bad = [row for row in r if int(row['n_resolved']) > 0 and (row['corrected_lgd'].upper() in ('NA','NAN','') or math.isnan(float(row['corrected_lgd'])))]
print('bad rows (n_resolved>0 but corrected NaN):', len(bad))
print('total rows:', len(r))
print('rows with n_resolved == 0:', sum(1 for row in r if int(row['n_resolved'])==0))
"
bad rows (n_resolved>0 but corrected NaN): 0 total rows: 42 rows with n_resolved == 0: 0
command: view path: /workspace/output/fig1_lgd_by_grade.png
<output_image> …[truncated]
command: view path: /workspace/output/fig2_naive_vs_corrected.png
<output_image> …[truncated]
No file changes, the agent left the workspace untouched.
# SyncVals normalized verifier summary # task: lending-club-lgd-bias-correction-r # attempt: 7 status: completed raw_score: 0.0 # reward rule: binary: score 0.0 != 1.0 # => reward = 0.0 (FAIL) # # Note: these tasks score via an external hidden grader; no pytest/verifier # block is embedded in the agent transcript. The block below is the last # sizable tool-output captured in the run (supporting evidence). ---------------------------------------------------------------------- <output_image> …[truncated]
Reproduce this trial: git checkout 2f94510 && PYTHONPATH=src python3 scripts/build_site.py , then open trial/trial_922f356c7ba94a9a. Re-running the agent live requires EVAL_PLATFORM_ENABLE_OAUTH_SMOKE=1 and is non-deterministic.
Trial trial_922f356c7ba94a9a · verifier authoritative; classifier explanatory.