1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PrecisionとRecallを求める拡張ノードをBobに作らせる(SPSS Modeler データ加工逆引き8-20)

1
Last updated at Posted at 2026-05-27

PrecisionとRecallを求める拡張ノードをBobに作らせる

スクリーンショット 2026-05-26 14.16.32.png

PrecisionとRecallを算出する方法は[逆引き8-2]で紹介しています。そちらを元に、IBM Bobと拡張ノードで求める手続きを示します。

スクリーンショット 2022-08-13 10.43.29.png

1.想定される利用目的

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

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

ストリーム

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

スクリーンショット 2026-05-26 14.17.26.png

[逆引き8-2]から拡張した部分のみを取り上げています。

a.入力するデータは以下の通りです。

スクリーンショット 2026-05-26 14.18.47.png

b.[フィルター]ノードを編集します。ストリームの再利用性を上げるためのフィルターです。

スクリーンショット 2026-05-26 14.22.38.png

c.[拡張のエクスポート]ノードを編集します。スクリプトをどのようにBobに書かせたかは後述します。

スクリーンショット 2026-05-28 8.41.30.png

[実行]します。

スクリーンショット 2026-05-26 14.24.20.png

Bobによるスクリプトの作成手順

1.Bobを起動して、作業フォルダを指定します。

スクリーンショット 2026-03-31 11.13.04.png

2.SPSS Modeler[拡張のエクスポート]ノードからサンプル構文をコピーします。

スクリーンショット 2026-03-31 11.14.40.png

3.プロンプトを作成します。サンプル構文をペーストします。

プロンプト

故障	$-故障
1	1
1	1
1	1
1	1
1	0
1	1
1	1
1	1
1	1
1	0
0	1
0	0
0	0
0	0
0	0
0	1
0	0
0	0
0	1
0	1

次の実績と予測からAccuracyとPredictionとRecallを計算してください

その上で先と同じ処理を実行して

SPSS Modelerの出力ノードで結果を表示するするネイティブPython APIスクリプトを書いてください

- 拡張のエクスポートノードのスクリプトの解説として
@https://www.ibm.com/docs/ja/spss-modeler/18.6.0?topic=spark-native-python-apis を参考にしてください
- シバンは不要です

###Use this code to import data from Modeler to Python
#import modelerpy
#modelerData = modelerpy.readPandasDataframe()
#modelerDataModel = modelerpy.getDataModel()


4.プロンプトを実行します。

スクリーンショット 2026-03-31 11.17.21.png

5.Bobの以下の出力を[拡張のエクスポート]にそのまま利用します。

Pythonスクリプト

# SPSS Modeler拡張エクスポートノード用スクリプト(表示のみ)
# 実績と予測データから評価指標(Accuracy, Precision, Recall)を計算して表示

import modelerpy

# Modelerからデータを読み込み
modelerData = modelerpy.readPandasDataframe()

# データフレームから実績と予測の列を取得
actual = modelerData['Flag'].tolist()  # 実績列
predicted = modelerData['Pre'].tolist()  # 予測列

# 混同行列の要素を計算
TP = 0  # True Positive: 実績1、予測1
TN = 0  # True Negative: 実績0、予測0
FP = 0  # False Positive: 実績0、予測1
FN = 0  # False Negative: 実績1、予測0

for i in range(len(actual)):
    if actual[i] == 1 and predicted[i] == 1:
        TP += 1
    elif actual[i] == 0 and predicted[i] == 0:
        TN += 1
    elif actual[i] == 0 and predicted[i] == 1:
        FP += 1
    elif actual[i] == 1 and predicted[i] == 0:
        FN += 1

# 評価指標の計算
accuracy = (TP + TN) / (TP + TN + FP + FN) if (TP + TN + FP + FN) > 0 else 0
precision = TP / (TP + FP) if (TP + FP) > 0 else 0
recall = TP / (TP + FN) if (TP + FN) > 0 else 0

# 結果を表示
print("=" * 50)
print("混同行列")
print("=" * 50)
print("True Positive (TP):  " + str(TP))
print("True Negative (TN):  " + str(TN))
print("False Positive (FP): " + str(FP))
print("False Negative (FN): " + str(FN))
print()

print("=" * 50)
print("評価指標")
print("=" * 50)
print("Accuracy (正解率):  {:.4f} ({:.2f}%)".format(accuracy, accuracy*100))
print("Precision (適合率): {:.4f} ({:.2f}%)".format(precision, precision*100))
print("Recall (再現率):    {:.4f} ({:.2f}%)".format(recall, recall*100))
print()

print("=" * 50)
print("指標の意味")
print("=" * 50)
print("Accuracy:  全体のうち正しく予測できた割合")
print("           (TP + TN) / 全データ数")
print()
print("Precision: 故障と予測したもののうち、実際に故障だった割合")
print("           TP / (TP + FP)")
print()
print("Recall:    実際の故障のうち、正しく故障と予測できた割合")
print("           TP / (TP + FN)")
print("=" * 50)

# Made with Bob

注意事項

今回は学習と検証を分割せずにサンプルとして示しました。目的に応じて変更してください。

4.参考情報

店舗の数だけファイルを分割するpython拡張ノードをBobに作らせる

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

SPSS Modeler 逆引きストリーム集(データ加工)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?