モデル評価指標 — count_table

分類モデルについては、モデルが確立された後、モデルを評価したいと考えています.一般的な指標には、混同行列、F1値、KS曲線、ROC曲線、AUC面積などがあります. 独自の関数を定義して、モデルの結果を n (100) の部分に分割し、top1 の精度とカバレッジを計算することもできます。混同行列、F1値、KS曲線、ROC曲線のAUC面積については以前に説明しましたが、今回で連載は終了となり、カスタム関数count_tableを紹介します。

1. count_table を詳しく紹介する

  
count_table は、ビジネス ニーズに応じてカスタマイズされた関数であり、分類問題の測定指標です。当時私が勤務していた会社では、加盟店の取引フローから有用な情報を取得して、加盟店にギャンブル、詐欺、偽造カード、不正なスワイプ、マネーロンダリングなどのリスクがあるかどうかを判断するモデルを構築する必要があったためです。ただし、同社の運営要員は限られているため、現時点では、モデルは多数の加盟店から上記のリスク特性を持つ加盟店を見つけ出し、調査のために運営担当者にプッシュする必要があります。現時点では、モデル スコアの上位部分の精度に注意を払う必要があるため、このニーズに基づいて、モデルの優秀さを測定する count_table 関数を作成しました。
  
count_table のテーブル構造は次のとおりです:
  
写真
  
各列の意味を詳しく説明します:
  
‍ group : 行の番号を表すグループ。
  
group_num: このグループに含まれるサンプルの数。通常は均等に分割され、例えば10個のサンプルを5つのグループに分割すると、各グループのサンプル数は2個になります。
  
group_cumsum: このグループのサンプルの累積数。最初のグループからこのグループに累積されたサンプル数の合計。
  
y_sum: このグループでラベルが 1 であるサンプルの数. risk フィールドでは、通常、危険なサンプルのラベルは 1 と定義されます。
  
y_cumsum: このグループの累積ラベルが 1 のサンプルの数。
  
group_bad_rate: グループの悪いサンプル レート、つまり、グループ内の 1 とラベル付けされたサンプル数をグループ内のサンプル数で割った値。
  
coverage_rate: このグループに蓄積された不良サンプルのカバレッジ率、つまり、このグループで 1 とラベル付けされたサンプルの累積数を、このグループのサンプルの累積数で割った値。
  
min_score: サンプルのグループの最低スコア。確率で表すと、最低の確率です。
  
max_score: サンプルのグループの最高スコア。確率で表すと、最高の確率です。

  

2. Python で count_table を計算する方法

  
次に、count_table の特定のコードと呼び出しステートメントを見てみましょう。
  

def count_table(predict, y, num=100):
  '''
  predict为预测值
  y为真实值
  num为分组的数量
  '''
  num=num
  check_table=pd.concat([predict, y], axis=1)
  check_table_1=check_table.sort_values(by="predict",ascending=False).reset_index(drop=True)
  check_table_1['rank']=np.floor((check_table_1.index / len(check_table_1) * num) + 1)
  check_table_1=check_table_1.astype(float)
  group=pd.DataFrame(check_table_1['rank'].drop_duplicates().reset_index(drop=True))
  group=group.astype(int)
  group_num=pd.DataFrame(check_table_1['rank'].value_counts().reset_index(drop=True))
  count_table=pd.concat([group,group_num], axis=1)
  count_table.columns=['group', 'group_num']
  count_table['group_cumsum']=count_table['group_num'].cumsum()
  count_table['y_sum']=pd.DataFrame(check_table_1.groupby(by=['rank'])['y'].sum().reset_index(drop=True))
  count_table['y_cumsum']=count_table['y_sum'].cumsum()
  count_table['group_bad_rate']=count_table['y_sum']/count_table['group_num']
  count_table['coverage_rate']=count_table['y_cumsum']/sum(count_table['y_sum'])
  count_table['min_score'] = pd.DataFrame(check_table_1.groupby(by=['rank'])['predict'].min().reset_index(drop=True))
  count_table['max_score'] = pd.DataFrame(check_table_1.groupby(by=['rank'])['predict'].max().reset_index(drop=True))
  return count_table

count_table=count_table(train_date['predict'], train_date['y'], 30)
count_table

train_date['predict']: モデル予測値または予測スコア。
  
train_date['y']: 真の値。
  
30: グループの数は自由に定義できます。
  
結果は次のとおりです。
  
写真
  
確率が 0.954 より大きい場合、このグループの不良サンプルの数は 39、サンプルの総数は 40、このグループの不良サンプルの割合は 0.975、および不良サンプルのカバー率は 0.13 です。‍ここまで、count_tableの紹介とPythonの実装例を説明してきましたが、興味のある学生は自分で実装してみてください。
  
興味があるかもしれません:
Python でピカチュウを描くPython で
ワード クラウド マップを描く
Python で 520 の永遠の心拍数を描くPython の顔認識 -あなただけ
私の目に映るのPython の py2neo ライブラリを使用して neo4j を操作する関係マップを作成するPython ロマンチックな告白ソース コード集 (愛、バラ、フォト ウォール、星空の下での告白)



おすすめ

転載: blog.csdn.net/qq_32532663/article/details/129772295