yeepee-ctr / parallel /score.py
Eric-Yyvuw's picture
sync 2026-10-23 13:31 IST | best val AUC 0.777500
1f78dbc verified
Raw History Blame Contribute Delete
2.2 kB
"""Like-for-like scoring of saved val predictions (v3 vs v2work) on identical rows. Read-only on v2work/v3."""
import sys, json, numpy as np, polars as pl
sys.path.insert(0, '/workspace/huawei/v4')
from common import report
from scipy.stats import spearmanr
V2='/workspace/huawei/v2work'; V3='/workspace/huawei/v3'
out={}
for cut, v3pred, v2preds in [(25, 'full25.txt', {'v2work_notime_eft_ne (combo_val25_notime.npy, 300r)':'combo_val25_notime.npy',
'v2work_notime_x2 (04:26)':'combo_val25_notime_x2.npy',
'v2work_screen_base_25pct':'scr_base_c25.npy'}),
(26, 'full26_lr05.txt', {'v2work_screen_base_25pct (scr_base_c26.npy)':'scr_base_c26.npy'})]:
# v3 val table: load_table sorts by (fold, eid) -> rows sorted by eid with stable intra-event order
v3 = pl.read_parquet(f'{V3}/feat/val{cut}.parquet', columns=['rowid','eid','clicked','tm_stale'])
v3 = v3.join(pl.read_parquet(f'/workspace/huawei/parallel/v3_val{cut}_pred.parquet'), on='rowid', how='left') # re-predicted (v3_repredict.py)
assert v3['p_v3'].null_count()==0
v2 = pl.read_parquet(f'{V2}/feat_v3/val{cut}.parquet', columns=['rowid','eid','clicked','tm_stale'])
for nm,f in v2preds.items():
p=np.load(f'{V2}/{f}'); assert len(p)==v2.height, (f,len(p),v2.height); v2=v2.with_columns(pl.Series(nm,p))
rs3=set(v3['rowid'].to_list()); rs2=set(v2['rowid'].to_list())
j = v3.join(v2.drop('eid','tm_stale').rename({'clicked':'clicked2'}), on='rowid', how='inner')
res={'rows_v3':v3.height,'rows_v2work':v2.height,'rows_common':j.height,'only_v3':len(rs3-rs2),'only_v2work':len(rs2-rs3),
'label_mismatch':int((j['clicked']!=j['clicked2']).sum())}
res['v3 ('+v3pred+')']=report(j, j['p_v3'].to_numpy())
for nm in v2preds:
res[nm]=report(j, j[nm].to_numpy())
res[nm]['spearman_vs_v3']=round(float(spearmanr(j[nm].to_numpy(), j['p_v3'].to_numpy()).statistic),4)
out[f'val{cut}']=res
print(json.dumps({f'val{cut}':res},indent=1),flush=True)
json.dump(out,open('/workspace/huawei/parallel/score_val.json','w'),indent=1)