2値分類#

データセット#

telco_churn_train

customerid

gender

seniorcitizen

partner

dependents

tenure

phoneservice

multiplelines

internetservice

onlinesecurity

onlinebackup

deviceprotection

techsupport

streamingtv

streamingmovies

contract

paperlessbilling

paymentmethod

monthlycharges

totalcharges

churn

time

4043-MKDTV

Male

0

Yes

No

71

Yes

No

Fiber optic

No

Yes

Yes

Yes

Yes

Yes

Two year

Yes

Electronic check

105.25

7291.75

No

1677465939

7971-HLVXI

Male

0

Yes

Yes

72

Yes

Yes

Fiber optic

No

No

No

No

No

Yes

Two year

Yes

Credit card (automatic)

84.5

6130.85

No

1677465939

2908-WGAXL

Female

0

Yes

Yes

56

Yes

Yes

No

No internet service

No internet service

No internet service

No internet service

No internet service

No internet service

Two year

Yes

Credit card (automatic)

24.95000076

1468.9

No

1677465939

0927-CNGRH

Male

0

No

Yes

1

Yes

No

No

No internet service

No internet service

No internet service

No internet service

No internet service

No internet service

Month-to-month

No

Mailed check

19.54999924

19.55

No

1677465939

2256-YLYLP

Male

0

Yes

Yes

68

Yes

No

DSL

No

No

Yes

Yes

Yes

Yes

Two year

Yes

Bank transfer (automatic)

72.94999695

4953.25

No

1677465939

WF の記述#

以下の2値を持つ churn カラムを target_column に設定する。

churn

No

Yes

_export:
  ml:
    input_database: ml_datasets
    output_database: ml_results  

+gluon_train:
  ml_train>:
    notebook: gluon_train
    input_table: ${ml.input_database}.telco_churn_train
    target_column: churn
    model_name: churn_model
    # 以下がオプション    
    time_limit: 3*60    

+gluon_predict:
  ml_predict>:
    notebook: gluon_predict
    model_name: churn_model
    input_table: ${ml.input_database}.telco_churn_test
    output_table: ${ml.output_database}.telco_churn_predicted

アウトプット#

予測結果を格納するテーブル#

+gluon_predict タスクにおいて output_table に指定した telco_churn_predicted テーブルが、予測結果を格納するテーブルとなる。

また、予測対象のテーブルとして +gluon_predict タスクで input_table に指定した telco_churn_test テーブルは既に結果が churn カラムに入っているので、予測結果と比較することができる。(もちろん実ケースにおいては、予測対象のテーブルには結果が入っていない。)

customerid

churn

predicted_churn

predicted_proba

predicted_probabilities

8404-FYDIB

No

No

0.2854697108

{“No”: 0.71453, “Yes”: 0.28547}

9753-OYLBX

No

No

0.2621820271

{“No”: 0.737818, “Yes”: 0.262182}

5322-ZSMZY

No

No

0.02351417206

{“No”: 0.976486, “Yes”: 0.023514}

9938-ZREHM

No

No

0.08578195423

{“No”: 0.914218, “Yes”: 0.085782}

5781-BKHOP

No

No

0.04580932856

{“No”: 0.954191, “Yes”: 0.045809}

churn または predicted_churn#

予測対象のテーブルに target_column が含まれている場合、予測結果は predicted_${target_column} のカラム名で出力される。含まれていなければ ${target_column} となる。今回の例では churn カラムが既に存在しているので predicted_churn となる。予測結果(今回の例だと Yes or No)が格納される。

predicted_proba#

2値の内、文字列の意味で値の大きい方(降順に並び替えた上で Top にくる方)の予測結果についての確信度を 0 から 1 までの数値で格納。値が大きければ確信を持って予測したことになる。今回の例では Yes と予測した時の確信度が格納されている。

predicted_churn カラムで No と予測したレコードに対しては、Yes の確信度を格納するこのカラムでは必ず 0.5 よりも小さいものとなっている。

Important

predicted_probapredicted_churn の値に対する確信度ではなく、全レコード一律に、2値の内の大きい方の値を予測した時の確信度となっていることに注意しよう。

predicted_probabilities#

2値の両方における確信度を Map として格納したカラム。ただし、テーブルには文字列型として記録されていることに注意しよう。

predicted_churn カラムで予測した値に対する確信度を出力する SQL は以下のようになる。

SELECT 
  customerid
  ,predicted_churn
  ,CAST(JSON_PARSE(predicted_probabilities) as map(VARCHAR, DOUBLE))[predicted_churn] AS predicted_proba2
FROM telco_churn_predicted
ORDER BY predicted_proba2 DESC

customerid

predicted_churn

predicted_proba2

2848-YXSMW

No

0.983883

1052-QJIBV

No

0.98378

6928-ONTRW

No

0.983734

0640-YJTPY

No

0.983525

8229-BUJHX

No

0.983519

time_limit#

実行時間のソフトリミットを秒数で指定する。このオプションが指定されない限り、すべてのモデルの学習が終わるまで実行されることになるため、モデル検証時にはこのオプションを入れておくことをお勧めする。