OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

PR曲線/F1値によるモデル評価

公開日:
更新日:
基本操作
機械学習
#機械学習

はじめに

機械学習の分類において、作成した予測モデルを評価する際にPR曲線/F1値を用いることがあります。
VerticaはPRC関数を利用するとPR曲線/F1値による評価を行えます。

PRC

コマンド構文

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=生存

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をビューとして登録しておきます。

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関数を実行します。

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曲線の出力例

参考情報

PRC
https://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 本記事を公開