はじめに
機械学習の分類において、作成した予測モデルを評価する際にPR曲線/F1値を用いることがあります。VerticaはPRC関数を利用するとPR曲線/F1値による評価を行えます。
PRC
コマンド構文
| 
					 1 2 3 4  | 
						PRC ( target, probability        [ USING PARAMETERS [num_bins=num‑bins]                           [, f1_score=return‑score ] ] )        OVER()  | 
					
| パラメータ名 | 内容 | 
|---|---|
| targets | 目的変数(正解情報)が格納されている列 | 
| probabilities | 予測結果(クラスが1である確率)が格納されている列 | 
| num‑bins | (オプション) 決定境界の数。デフォルトは100です。 | 
| output | (オプション) AUCを出力するか否か。デフォルトはtrue(出力する)です。 | 
Vertica 9.2から、INTEGER型だけでなく、BOOLEAN型、CHAR/VARCHAR型の入力データもサポートされ、分類アルゴリズムでも利用できるようになりました。
利用例

例として以下のロジスティック回帰を使用して作成したタイタニックの生存者予測モデル(titanic_log_regの予測結果を評価します。
survived列が正解情報、predectionがVerticaが予測した結果です。
※0=死亡、1=生存
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						dbadmin=> SELECT passenger_id, survived, dbadmin->        PREDICT_LOGISTIC_REG(pclass, sex_1, age, sibling_and_spouse_count,parent_and_child_count,fare,embarkation_point_1,embarkation_point_2 dbadmin(>        USING PARAMETERS model_name='titanic_log_reg') AS prediction dbadmin-> FROM titanic_training_encoded ORDER BY passenger_id LIMIT 5;  passenger_id | survived | prediction --------------+----------+------------             1 |        0 |          0             2 |        1 |          1             3 |        1 |          1             4 |        1 |          1             5 |        0 |          0 (5 rows)  | 
					
※本例では説明の都合上、トレーニングデータで評価を実施しています。
PRC関数を利用し、上記の予測結果を評価します。
事前準備として、予測結果の呼び出しを簡素化するために、上記SQLをビューとして登録しておきます。
| 
					 1 2 3 4 5 6  | 
						dbadmin=> CREATE VIEW titanic_probability AS dbadmin-> SELECT passenger_id, survived AS obs, dbadmin->        PREDICT_LOGISTIC_REG(pclass, sex_1, age, sibling_and_spouse_count,parent_and_child_count,fare,embarkation_point_1,embarkation_point_2 dbadmin(>        USING PARAMETERS model_name='titanic_log_reg',type='probability') AS prob dbadmin-> FROM titanic_training_encoded; CREATE VIEW  | 
					
※PR曲線/F1値は予測の確率を基に計算を行うため、PREDICT_LOGISTIC_REGのオプションでtype=’probability’を指定して確率表示を行っています。
作成したtitanic_probabilityビューに対してPRC関数を実行します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  | 
						dbadmin=> SELECT PRC(obs::int, prob::float USING PARAMETERS f1_score=true) OVER() FROM titanic_probability;  decision_boundary |       recall        |     precision     |      f1_score      |                     comment -------------------+---------------------+-------------------+--------------------+-------------------------------------------------                  0 |                   1 | 0.386850152905199 |  0.557883131201764 |               0.01 |                   1 | 0.386850152905199 |  0.557883131201764 |               0.02 |                   1 | 0.387442572741194 |  0.558498896247241 |               0.03 |                   1 | 0.389830508474576 |  0.560975609756098 |               0.04 |                   1 |         0.3953125 |  0.566629339305711 |           ・           ・           ・               0.49 |   0.719367588932806 | 0.774468085106383 |  0.745901639344262 |                0.5 |   0.707509881422925 | 0.774891774891775 |  0.739669421487603 |               0.51 |   0.703557312252964 | 0.791111111111111 |  0.744769874476987 |           ・           ・           ・               0.94 |   0.138339920948617 | 0.972222222222222 |  0.242214532871972 |               0.95 |   0.102766798418972 | 0.962962962962963 |  0.185714285714286 |               0.96 |  0.0513833992094862 | 0.928571428571429 | 0.0973782771535581 |               0.97 |  0.0118577075098814 |                 1 |          0.0234375 |               0.98 | 0.00395256916996047 |                 1 | 0.0078740157480315 | Of 815 rows, 654 were used and 161 were ignored (99 rows)  | 
					
上記結果よりtitanic_log_regモデルのF1値は決定境界=0.5のとき0.739669421487603であることが確認できます。
また、Excel等で上記結果を利用することでPR曲線を描くことが可能です。
PR曲線の出力例

参考情報
PRChttps://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/MachineLearning/PRC.htm
検証バージョンについて
この記事の内容はVertica 9.1、9.2で確認しています。更新履歴
2019/07/09 Vertica 9.2の情報を追加2018/12/28 本記事を公開
- 投稿タグ
 - 機械学習, machile learning, 評価
 

