Salesforce予測ビルダーでタイタニックのデータを分析してみた

同じデータをEinstein Discoveryで分析した記事が[こちら](https://qiita.com/kiura30/items/a8268253d51db0ebbc31)にあります。
予測ビルダーで同じ分析してみることでEinstein Discoveryと予測ビルダーの製品としての位置付けが説明しやすいのではないかと思って試してみました。
(なお、Spring'19のバージョンをベースに記述しています。）

# 今回使用するデータ
前の記事と同じkaggleの[タイタニック](https://www.kaggle.com/c/titanic/data)のデータです。
train.csv は生存／死亡の情報がある学習対象です。test.csv はこの項目がない予測対象です。
gender_submission.csv は予測対象の実際の生死情報なので、答え合わせに使います。
# 手順
1. train.csv(生存情報をもつレコード＝学習対象)とtest.csv(生存情報を持たないレコード＝予測対象)をカスタムオブジェクトにロード
![Picture1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/f0dc36ad-1f0c-c8fd-6f14-46b603c5b0fb.png)
インポート・ウィザードを使いましたが手段は何でも構いません。test.csvをロードした分についてはSurvivedの値はnullになります。  

2. チェックボックス(boolean)の数式項目を作成
Survivedの項目がYesのときはtrue、それ以外はfalseとなる数式項目を作ります。これは現在予測ビルダーで予測できるのがboolean値だからです。
![Picture2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/6c3a2e83-1f8b-06e4-db48-def68c3f6dd2.png)
3. リストビューを確認
SurvivedのYes/Noが適切に作成した数式項目に反映されているか確認します。
![Picture3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/374fd18a-5fee-519e-cecf-f043960cc1cc.png)
4. 設定画面より予測ビルダーをひらきます
ここからが予測ビルダーの操作です。
![Picture4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/cdcd81c2-7e70-3d4f-0338-16ce0f62079d.png)
5. 新しい予測を作成します
![Picture5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/0f080dff-2154-c08d-665c-c29eb3bc1850.png)
6. 新しい予測に名前をつけます
![Picture6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/2ffc100c-738e-f283-c310-532ce2cd17fe.png)
7. 予測するオブジェクトを選びます
![Picture7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/4e81306c-e4a5-cdef-f541-46a1b3627dc3.png)
8. 予測する項目として先程作成したbooleanの数式項目を選びます
![Picture8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/0c66cdab-4810-4d7a-40b9-cbaae1e7a64a.png)
9. サンプルとして使用するレコードを指定します
SurvivedにYes/Noいずれかが入っているレコードを対象とします。予測対象レコードはそれ以外のレコードです。![Picture9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/5f71e338-b405-2f7c-b9ce-e616213529ca.png)
![avocado.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/1f1fe474-8617-8519-b1b9-f69164bcb5d9.jpeg)
10. 予測の基準となる項目を選択します
Salesforceレコードの作成者や所有者は今回の場合明らかに無関係ですので、そういった項目は外します。![Picture10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/b7d0b366-7127-3e09-2a0b-2c8fe809bfd1.png)
11. 結果を保存する項目名を指定します
予測ビルダーは結果をカスタム項目に出力しますので、その項目を指定します。存在しない場合は予測ビルダーの方で作成しますので、事前に作成しておく必要はありません。![Picture11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/7c84150e-5f99-9c11-7571-7dbb6956ffce.png)
12. 今までの設定を確認し予測を構築します。
![Picture12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/6f07b620-823e-58e5-aa22-ea75b186c3fa.png)
13. 構築には時間がかかります。
![Picture13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/000397e7-039d-f500-f245-79b01cab9e03.png)
構築中は状況が「待機中」となります。![Picture14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/4437eb9c-79ab-3336-0a4f-4d9b4edd9f9f.png)
14. 構築が完了しました
通知によって気づくことができます。![Picture15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/7de7475f-c4a7-cdc8-8cfe-cdcca7e1c8c5.png)
状況が「レビュー準備完了」に変わりました。![Picture16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/86735838-ee44-6565-440f-ff8f1761dcc3.png)
15. スコアカードを表示してみます
予測品質は素晴らしいということなので一安心![Picture17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/be0b0e8e-1d42-6ed1-8339-181658cee0ca.png)
16. 有効化します
結果が指定したカスタム項目に書き込まれます。これに少し時間がかかることがありますが、落ち着いて待ちましょう。![Picture18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/db75c3c9-6904-6e49-2bdb-6eed133f0c3b.png)
17. 結果を確認します
リストビューに予測結果の項目を追加しました。Survivedがnullのレコードに対し結果が書き込まれています。![Picture19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/7c0dd536-3e5e-421f-50a8-38da5fa14037.png)
確かに女性の生存率が高く出ています。

# 答え合わせ
IDをマッチングさせてgender_submission.csvの生死情報を新規カラムにロードします。50を閾値として生存／死亡の予想とみなすと以下のような正答率になります。
![Screen Shot 2019-06-04 at 16.28.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/43c7fbdb-a899-00f7-0a12-43486bdb7cc3.png)
死亡と予想していた人の98.86%が実際に死亡していて、生存と予想した人の96.75%が実際に生存したという結果になりました。

# Einstein Discoveryとの違い
現時点では予想する項目値はtrue/falseのboolean値であるということはありますが（数値項目はベータ）、それ以外の大きな違いは以下のようになると思います。
### ストーリーがない
スコアカードを見れば影響が大きいと判断した予測因子はわかりますし、
![Screen Shot 2019-06-04 at 16.26.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/e2c32bb6-9c19-48e4-15c5-374623431714.png)
影響がプラスに働いたかマイナスに働いたかもわかります。
![Screen Shot 2019-06-04 at 16.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/d46ba745-cf56-472e-04c7-7eb773d2e3b6.png)
ただし、[男性グループの中でも16歳以下の生存率は高い](https://qiita.com/kiura30/items/a8268253d51db0ebbc31#%E8%8B%A5%E3%81%84%E7%94%B7%E6%80%A7)、といった分析は明示してくれません。
### 評価理由・改善のための推奨事項を明示しない
予測因子をどのように評価してこのような予測を行ったのか、改善に効くポイントは何なのかといった推奨事項は表示してくれません。下図はEinstein Discoveryの出力例です。
![Screen Shot 2019-06-04 at 17.25.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/97af27fe-bd10-f824-e24e-503925d596fa.png)
### 再予測は即時実行されない
Einstein Discoveryではレコードを変更すると即時に再予測することができますが、予測ビルダーの予測項目更新は１時間程度のタイムラグがあります（再予測されない訳ではありません）。下図はEinstein Discoveryでもし女性だったら生存確率がどの様になるか試してみた様子です。![Untitled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144149/6895f7f4-24aa-3451-c10e-2b71c674a8c4.gif)

# まとめ
Einstein Discoveryでないとできないことは当然あるわけですが、とにかく簡単に予測を作れることが魅力です。データセットを作成する必要もありませんし、オブジェクトの項目に結果が書かれるのでwritebackなどの設定も不要です。
Trailheadでは[レストランの予約がキャンセルされるか](https://trailhead.salesforce.com/ja/content/learn/projects/prediction_builder)、[支払いが遅延するか](https://trailhead.salesforce.com/ja/content/learn/modules/einstein-prediction-builder)、といったユースケースで課題が作成されています。ご自身のデータでも役に立つユースケースがないか一度考えてみると面白いかもしれません。