ファイナンス機械学習:特徴量の重要度 練習問題 最も重要と判断されたとくちょ重要と判断された特徴量を落とし再び重要度を測定する

PCA変換した特徴量と元の特徴量を結合し、MDI ,MDA,SFIで重要度を推定器にランダムフォレストを用いて測定したものの上位を落とし、再測定する。

def EXER8_3(numDrop=3):
    n_estimators=1000
    cv=10
    PCAthrd=0.95
    from itertools import product
    import pathlib
    X,cont=getTestData()
    PCAX=getOrthoFeats(X)
    PCAX.index=X.index
    trnsX=pd.concat([X, PCAX], axis=1)

    testlabel='XPCARF_R'+str(numDrop)
    dict0={'minWLeaf':[0.],'scoring':['accuracy'],'method':['MDI','MDA','SFI'],
           'max_samples':[1.]}
    jobs,out=(dict(zip(dict0,i))for i in product(*dict0.values())),[]
    pdir=pathlib.Path()
    kargs={'pathOut':pathlib.PurePosixPath(pdir/testlabel),
           'n_estimators':n_estimators,'tag':testlabel,'cv':cv}

    for job in jobs:
        job['simNum']=job['method']+'_'+job['scoring']+'_'+'%.2f'%job['minWLeaf']+\
        '_'+str(job['max_samples'])
        kargs.update(job)
        imp,oob,oos=getFeatImportances(trnsX=trnsX,cont=cont,RandomForest=True,**kargs)
        imp=imp.sort_values('mean',ascending=False)
        t5=imp.index[:numDrop]
        XX=trnsX.drop(t5,axis=1)
        imp,oob,oos=getFeatImportances(trnsX=XX,cont=cont,RandomForest=True,**kargs)

        plotFeatImportance(imp=imp,oob=oob,oos=oos,**kargs)
        df0=imp[['mean']]/imp['mean'].abs().sum()
        df0['type']=[i[0] for i in df0.index]
        df0=df0.groupby('type')['mean'].sum().to_dict()
       df0.update({'oob':oob,'oos':oos});df0.update(job)
        out.append(df0)
    out=(pd.DataFrame(out).sort_values(['method','scoring','minWLeaf','max_samples']))
    out=out[['method','scoring','minWLeaf','max_samples','I','R','N','O','oob','oos']]
    outfile=str(kargs['pathOut'])+'stats.csv'
    out.to_csv(outfile)

MDI

重要度が高い順に、R1,ORT4, ORT3を落とし、再度重要度を判定する。

MDI

結果、I8>R3>I4>I5となり、R9の重要度は落ちている。

MDA

初めのMDAで重要度が正方向に高いと推定されたI_8,R_8,I_3を落とし、再測定した。

MDA without 3 highest features

SFI

SFIで、最初に重要度が高いと判定されたR_1, ORT_4, R_3を落として再度重要度を推定した。

SFI

SFIは、特徴量を一つづつ使用して重要度を判定するため、重要度の高い特徴量を落として再測定しても、結果は変わらない。

この記事が気に入ったらサポートをしてみませんか?