Precison(適合率)とRecall(再現率)を求める(SPSS Modeler データ加工逆引き8-2)

# Precison(適合率)とRecall(再現率)を求める（混同行列）

![スクリーンショット 2022-08-13 10.43.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/27928ecd-f7d8-62af-92aa-c807b172d879.png)

*Ver18.4から自動分類ノードでPrecisionとRecallが計算されるようになりました。この記事では実装後のモニタリングのためにノードを利用した計算方法を解説します。

![スクリーンショット 2022-09-13 9.01.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b909ffeb-00fa-d17f-6846-31b0a408693c.png)

## 1.想定される利用目的

・予測モデルの性能評価
・実装後のモデルメンテナンスのための性能指標の算出

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/precision_recall.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-08-13 10.51.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0528f6be-e715-dae0-ce38-dbfe2f0809f1.png)

a.入力するデータは以下の通りです。故障有無とその予測の2列のデータです。
![スクリーンショット 2022-08-12 11.57.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/833c5174-cdd7-ff80-f384-4c8de52da9b3.png)

b.[精度分析]ノードを編集します。[一致行列]にチェックして[フィールドによる評価対象分析]にふたつのフィールドを選択します。
![スクリーンショット 2022-08-13 17.25.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0e8fc264-7a15-dd33-5355-785d10fc97a2.png)

[実行]します。
故障と予測して実際に故障していたのが右赤枠の8レコード（TP）、故障と予測して実際に故障していなかったのが4レコード（FP）。その合計12レコードに占めるTPの割合が適合率=0.667です。故障を警告して検査した中でどの程度故障を言い当てられるかを示しています。
一方、実際に故障した右青枠10レコード(FN+TP)のうち事前に察知できた8レコード（TP）の割合が再現率=0.667です。適合率が良かったとしても見逃した故障（FN）が多いと業務的には問題視されるためふたつの指標のバランスが重要になります。

![スクリーンショット 2022-08-13 11.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/85ba843a-10e7-1ff6-04f9-06117a83873e.png)

以下のブログでもこの表示方法が紹介されています。

https://www.ibm.com/blogs/solutions/jp-ja/spssmodeler-push-node-23/

#### クロス集計ノードで適合率と再現率を確認する。

c.[クロス集計]ノードを編集します。
![スクリーンショット 2022-08-13 11.11.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2e2e1dc3-d217-fd87-7e6b-670200f12f6b.png)

[外観]タブは以下のように設定します。
![スクリーンショット 2022-08-13 11.11.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d52d1d63-d5ce-1375-f3b4-df41cd81e9c0.png)

[実行]します。
![スクリーンショット 2022-08-13 11.24.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/06c2dfd4-61be-c6a6-5f0b-d0c343049767.png)

以下の記事でもこの表示方法が紹介しています。

https://qiita.com/416nishimaki/items/7006912d4d4f6515841b#4tips

#### 実装後のモデル監視のために適合率と再現率をテーブル表示させる。

d.[フィールド作成]ノードを編集します。[派生]モードを[名義型]にして1でも0でもないとデフォルト値がNullになるように定義します。＊このNullが後続の集計で適切に処理されます。
![スクリーンショット 2022-08-13 11.25.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8aec2af6-d0bf-a02d-d9fa-faf01040a6eb.png)

e.[フィールド作成]ノードを編集します。[派生]モードを[名義型]にして1でも0でもないとNullになるように定義します。
![スクリーンショット 2022-08-13 11.27.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e48a3687-f95e-12eb-efed-4824dd8158ad.png)

[プレビュー]します。適合率にはTNとFNが、再現率にはTNとFPが考慮されず、後続の平均の計算で割り算の分母が適切になるようにNullを意図的に利用しています。
![スクリーンショット 2022-08-13 17.53.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/920b216c-9bf0-654c-ad38-b9217db28eb6.png)

f.[レコード集計]ノードを編集します。
![スクリーンショット 2022-08-13 11.28.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c8fabcdf-4fe4-702f-1557-cb483980409c.png)

[プレビュー]します。適合率と再現率が求められました。
![スクリーンショット 2022-08-13 11.28.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c366f8b3-a391-1036-b74d-b4dee9ac89d1.png)

＊Accuracy（精度）の求め方は逆引き8-1を参照してください。

#### 組み込み集計関数を利用して適合率と再現率をテーブル表示させる。

g.[フィールド作成]ノードを編集します。
![スクリーンショット 2022-08-13 17.59.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/5e133fe4-8cfb-29eb-ae2c-23292d5c931d.png)

[プレビュー]します。
![スクリーンショット 2022-08-13 17.59.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d77ba603-fdc6-8389-1ac4-6f9af489cb8f.png)

h.[再構成]ノードを編集します。後続で利用する組み込み集計関数COUNTで欠損ではない値をカウントさせるため[値フィールド]はNullがないものでしたらOKです。
![スクリーンショット 2022-08-13 18.00.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8284b0ac-2068-f9df-ffd3-035230c339fe.png)

[プレビュー]します。
![スクリーンショット 2022-08-13 18.01.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2caa252b-ac90-d305-8fef-25cbc03c9b12.png)

i.[レコード集計]ノードを編集します。
![スクリーンショット 2022-08-13 18.02.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/60bc68dc-e26d-edf5-a4d3-2fcbc37c0856.png)

式ビルダーの組み込み集計関数を利用すると便利です。
![スクリーンショット 2022-08-13 18.07.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ac36194a-4d0f-1e8b-8e46-ae80c733293c.png)

#### 注意事項

適合率と再現率の良し悪しは実際の業務でどの程度エラーが許容されるか、どの程度予測によってメリットを得られるかによって確定します。

## 4.参考情報

#### モデルの性能指標について解説した記事

https://www.ibm.com/blogs/solutions/jp-ja/modeler-tips-04/

https://www.ibm.com/blogs/solutions/jp-ja/learn-modeler-09/

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008