【入門】色々触ってみたので、Firebase Predictionsについて詳細をまとめました

調べても情報があまり見つからず、活用事例もこれからという感じがある、[Firebase Predictions](https://firebase.google.com/docs/predictions/?hl=ja) 

2018年12月現在ではまだβ版ですが、実際に触ってみたり、ドキュメントを読んで分かったことをまとめます。アプリが絡む開発をされている方は、ぜひご参考にしてみてください!

## 対象読者
- アプリのグロースに携わっている、PM/エンジニア
- 機械学習でユーザーの行動予測モデルを作成したいと思っているデータ分析担当者

※[Firebase Prediction 公式ドキュメント](https://firebase.google.com/docs/predictions/?hl=ja)を読んで理解できる方は、そちらを読んだ方が早いと思います！本記事はそちらの要点をまとめたものになります。


## [Firebase Predictions](https://firebase.google.com/docs/predictions/?hl=ja)とは?
[Firebase Predictions公式ドキュメント](https://firebase.google.com/docs/predictions/?hl=ja)

Introducing Firebase Predictions
https://www.youtube.com/watch?v=ORrvrVEHJz4

↓実際のキャプチャ(黒塗りし過ぎて、よく分からなくなってますねw)
<img width="1244" alt="スクリーンショット 2018-11-04 16.26.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/56466/b073511d-97a4-6008-5be4-ca602543e73e.png">


ものすごくザックリ言うと、__"アプリ利用者の次の7日間における、特定アクションの実行有無を予測するモデルを生成し、各Firebaseプロダクトで利用可能なセグメントを生成する"__機能です。現状、iOSアプリと、Anroidアプリ向けのプロダクトとなっているので、WEBサービスには利用できません。

これでもか！と言うほどに、更にザックリ言うと、__"機械学習の知識が全く無い人でもGoogleが自動でユーザーの未来7日間の行動を予測してくれて、しかもその結果を各種施策にも楽々活用する所まで面倒を見てくれる"__機能です。

予測した結果を用いて、例えばECサイトならば、【次の7日間で商品を購入すると予測されるユーザーに対してのみ、アプリ内メッセージでクーポン配布のキャンペーン"を実施する】 、

ソシャゲならば、【次の7日間で離脱(チャーン)すると予測されるユーザーに対してのみ、アプリ内通貨の割引セールを行う】などの施策が実施できるでしょう。

特にサービスのチャーン予測はプロダクト改善寄りのデータサイエンティストがバリューを出しやすい、メイントピックの1つですが、そこをGoogleが代わりにやってくれる機能ですね。凄い!仕事が無くなっちゃう!

## Firebase Predictionでできること
もう少し具体的に出来る事を列挙すると以下になります。

- FirebaseAnaltyicsイベントの実行有無を予測するモデルを5件まで作成できる
    - Analyticsで飛ばしているイベントの中から任意のものを予測対象として選択できます
- どの特徴量を元に、学習が実行されているかUI上で確認する事ができます
- リスク許容度に応じて、モデルの汎化性能を選択する事ができます
- 作成した予測セグメントはUI上から、Remote Config/Cloud Messagingなど別のプロダクトと連携して施策に活用できます
- Google BigQueryに予測結果をエクスポートする事で、外部ソリューションとも自由に結果を共有することができます

## 実際に使ってみる
### STEP1:[Firebase Predictions](https://firebase.google.com/docs/predictions/?hl=ja)をアクティベートする
- 設定方法自体は簡単で、Firebase管理画面のPredictionsから機能をアクティベートするだけです。数日経過すると、予測結果が表示され、以後は毎日自動で予測を実行してくれます。
<img width="1262" alt="スクリーンショット 2018-11-04 13.42.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/56466/6a2f7072-3412-65ad-6163-ccb26c0f34fa.png">

### STEP2:カスタムの予測モデルを作成する
- 初期状態では、"離脱の有無(charn or not_churn)" / "購入の有無"(spend or not_spend)を予測するモデルの結果が表示されます。不要なものは非表示にして、任意のAnalyticsイベントを追加しておくと良いでしょう。

- __予測するイベントは、カスタムコンバージョンに設定済みのものになるので、予測モデルで使用したいイベントは事前にコンバージョン設定しておきましょう。__
<img width="529" alt="スクリーンショット 2018-11-04 15.24.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/56466/79b83965-3528-8b75-e243-33b84232725b.png">


### STEP3:予測結果を施策に活用する
- 上記の設定を行いさえすれば、後は"アクションの選択"-->任意の施策を検討するだけです。

- アクション部分はまだ触り切れていないのですが、Remote Configと連携可能なので、ABテスト/UI変更/プッシュ/アプリ内メッセージなどの施策と繋ぎ込みが可能です。夢が広がりますね。

<img width="865" alt="スクリーンショット 2018-11-04 12.58.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/56466/98deee30-0c6e-208b-47a7-9be3680eb3a5.png">

### 応用:予測結果をFirebaseプロダクト以外で活用する
予測結果のBigQueryへのエクスポートにも対応しています。予測結果のモニタリングや、Firebase製品群以外での施策にも道がひらけています。[詳しくは公式ドキュメントを参照](https://firebase.google.com/docs/predictions/bigquery-export/?hl=ja)

↓実際のエクスポートテーブル例
<img width="1248" alt="スクリーンショット 2018-11-04 13.03.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/56466/377e069e-f76f-4544-02af-498f87c3fed0.png">


## その他痒いところに手が届く便利機能たち
基本的には上の設定を行うだけで利用可能ですが、そのほかの便利機能を紹介します。

### 便利機能①:学習に利用されている特徴量を調べてみる
- "アクションの選択"-->"この予測を調べる"で、実際の学習に使用された特徴量の一覧を見る事ができます。
    - (余談) 自力で予測モデルを作成するデータ分析者にとっても、どのログが特徴量として使われているか?は参考になりそう。各イベントのどのパラメータが学習に使われているのか?も閲覧できるので、見ているだけでも結構面白いです。

<img width="1267" alt="スクリーンショット 2018-11-04 15.25.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/56466/06805a30-427e-3b26-5aba-6e7a046a7468.png">
 
### 便利機能②:リスク許容度によってモデルの予測性能を選択する
- 単一のモデルを使用するのみではなく、利用シーンに応じて許容する不確実性を調整する機能があります。[公式ドキュメント:リスク許容度とモデル パフォーマンス](https://firebase.google.com/docs/predictions/predefined-predictions?hl=ja)に分かりやすい説明があるので、気になる人は見てみてください。
- __"予測結果を外したユーザーに届いても問題ない施策"につなげる場合は、モデルのリスク許容度を(高に)、"予測結果を外したユーザーに届くと問題のある施策"につなぐ場合は、モデルのリスク許容度を(小)にする__のが基本戦略になりそうです。

    - (余談) 数値ベースで、リスクを把握できるUIは直感的に分かりやすくて、ちょっと感動しました。

<img width="520" alt="スクリーンショット 2018-11-04 14.15.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/56466/17b21427-0bdb-a04c-5d75-df59eb3031b4.png">

## [機械学習経験者向け]学習済みモデル作成の裏側
さて、UI上から確認できるのはインプットしている特徴量のみですが、[Firebase Predictions](https://firebase.google.com/docs/predictions/?hl=ja)は内部的にはどのようにしてモデル作成を行なっているのでしょうか?[学習プロセスの詳細についてはドキュメントで説明があったのでまとめてみました](https://firebase.google.com/docs/predictions/risk-profiles?hl=ja)

使用している具体的なアルゴリズムについては、記載が見つけられませんでしが、以下の方法で学習と予測が行われています。

(余談) 実際に施策に適用する場合は、先ほど説明した利用する特徴量と合わせて、学習の仕組みを共有する事で、ブラックボックス化させる事なく、コミュニケーションが取れそうですね。


- 学習プロセスのポイント

```text:how_to_modeling.txt
①過去28日間にアプリにアクセスがあったユーザーを予測対象に含む
②モデル生成日から起算した直近の7日間の行動データを元に、各ユーザーのラベル付けを行う(1)
③モデル生成日から8日〜28日前の期間における行動ログを元に、(1)のラベルを予測する2値分類モデルを作成する
④学習と性能評価はホールドアウト法で行い、学習用データとテスト用データを8:2に分割する
⑤上記方式による予測性能が、UI上で確認できるモデルパフォーマンスとなる
```

- 図に落とすとこんな感じ
![Untitled(16) (1).png](https://qiita-image-store.s3.amazonaws.com/0/56466/b78c9096-cba1-a21c-39b9-71d94e845eaf.png)

## まとめ

単純に予測を行うツールではなく、実際の施策への繋ぎ込み/モデルパフォーマンスの見える化など、__実際に機械学習の結果を施策に活用する点__に工夫が凝らされており、完成度の高いプロダクトだなと思いました! 機会があれば、使ってみたいな〜！