"""Cluster (cycle-level) bootstrap of MAE differences vs plain average, from out/loco_by_cycle_minpolls2.csv. Run: python -I bootstrap.py"""
import numpy as np, pandas as pd
R=pd.read_csv('out/loco_by_cycle_minpolls2.csv'); rng=np.random.default_rng(7)
P=R.pivot_table(index='cyc',columns='model',values='mae'); N=R.groupby('cyc').n.first()
base='M0 plain average'; out=[]
for m in P.columns:
    if m==base: continue
    ok=P[[base,m]].dropna().index; d=(P.loc[ok,m]-P.loc[ok,base]).values; w=N.loc[ok].values
    bs=[]
    for _ in range(10000):
        i=rng.integers(0,len(ok),len(ok)); bs.append(np.average(d[i],weights=w[i]))
    out.append((m,round(np.average(d,weights=w),3),round(np.percentile(bs,2.5),3),round(np.percentile(bs,97.5),3),int((d<0).sum()),len(ok)))
print(pd.DataFrame(out,columns=['model','MAE_diff_vs_plain(neg=better)','ci2.5','ci97.5','cycles_better','cycles']).to_string(index=False))
