SSブログ

SPSS Modelerのスクリプト ~ループ処理を使った効果計測 [データサイエンス、統計モデル]

目的
10分割し、上位10%, 20%, ・・・, 100%のデータを使ったモデリングを行い、スコアを抽出する

ストリーム


スクリプト
# 付与人数の抽出
execute 'max_RECORD_NO':setglobals

#### ループ処理 10回 START ####
for I from 1 to 10

# 対象者を抽出
set "loop_10".condition = "RECORD_NO <= @GLOBAL_MAX('RECORD_NO') * 0.1 * " >< I

# ロジスティック回帰
execute 'Logistic_regression'

# 作成したモデルをパレットに挿入
insert model 'model_1' at 670 430
connect A to 'model_1'
connect 'model_1' to score

# ファイル名を変更
set "output".full_filename = 'D:\SPSS\output_' >< I

# アウトプット
execute 'output'

# 作成したモデルを削除
delete model 'model_1'

# パレット上のモデルを削除
delete 'model_1'

endfor
#### ループ処理 10回 END ####


スクリプトの説明
# 付与人数の抽出
execute 'max_RECORD_NO':setglobals

こちらは現在のレコード数がどれだけあるかを集計しているだけです。

後のスクリプトで、こちらの値を使った処理を行っていきます。
仮に1万レコードあった場合、10分割すると、1000レコード、2000レコード、・・・、10000レコード持ってくる処理を書いていきます。

#### ループ処理 10回 START ####
for I from 1 to 10

endfor
#### ループ処理 10回 END ####


こちらでループ処理が可能
10を100にすると100回ループ処理ができます。

# 対象者を抽出
set "loop_10".condition = "RECORD_NO <= @GLOBAL_MAX('RECORD_NO') * 0.1 * " >< I

条件抽出ノードの中身を書き換えるには、
"ノード名".conditionで書き換えることができます。

@GLOBAL_MAX('RECORD_NO')は、先ほど計算したグローバル値を持ってくる書き方です。

ちなみに、フィールド作成ノードの場合は、
set "ノード名".formula_expr = 【入力したい式】
になるので、注意が必要です。


# ロジスティック回帰
execute 'Logistic_regression'

# 作成したモデルをパレットに挿入
insert model 'model_1' at 670 430
connect A to 'model_1'
connect 'model_1' to score


1. ロジスティック回帰を実行
2. モデルをパレットに挿入
3. ストリームをつなぐ
という一連の処理を行っています。



# ファイル名を変更
set "output".full_filename = 'D:\SPSS\output_' >< I

# アウトプット
execute 'output'


出力するファイル名をそれぞれ変更していきます。
SPSSフォルダ直下にファイルを作る設定です。

# 作成したモデルを削除
delete model 'model_1'

# パレット上のモデルを削除
delete 'model_1'


作成したモデル、および、パレット上のモデルを削除して変なゴミが残らないようにしています。

nice!(7)  コメント(0) 
共通テーマ:学問