# CLTV予測 CLTV予測ソリューションノートブックは、[Buy Till You Die (BTYD)](https://en.wikipedia.org/wiki/Buy_Till_you_Die)モデルを実装するためのオープンソースPythonライブラリ[Lifetimes](https://github.com/CamDavidsonPilon/lifetimes)を使用して、顧客生涯価値(CLTV)を予測します。 ![](/assets/112066640.443827cec104e35bc89a87cb7fb1f8ad148fdae7ac73349fd4e927d7adef41b5.3cb60505.png) BTYDは以下を使用して実装されます: * [BG/NBD](https://brucehardie.com/papers/018/fader_et_al_mksc_05.pdf)(Beta-Geometric/Negative Binomial Distribution)モデルは、購入頻度の分布と過去の購入後のエンゲージメント低下を記述するトランザクション履歴曲線に適合します。 * [Gamma-Gammaモデル](https://www.brucehardie.com/notes/025/gamma_gamma.pdf)は、トランザクションあたりの平均支出を予測するために使用されます。 ## 想定される入力 このノートブックは、RFM分析ノートブックと同じ入力形式を取ります。*`input_table`*オプションで指定されたトランザクションテーブルで、以下のように*`user_column`*、*`tstamp_column`*、および_`amount_column`_カラムを持ちます: | user | tstamp | amount | | --- | --- | --- | | 3105285968 | 2011-04-05 | 115 | | 1850985734 | 2011-11-23 | 1037 | | 274382808 | 2011-04-25 | 17 | | 358273144 | 2011-04-02 | 60 | | ... | ... | ... | Treasure Dataは、_`tstamp`_カラムに対して、[dateutil](https://dateutil.readthedocs.io/en/stable/parser.md)でサポートされる様々な[ISO-8601日時形式](https://en.wikipedia.org/wiki/ISO_8601)およびUNIXタイムスタンプを受け付けます。 CLTVノートブックは、CLTV予測に日付ベースの頻度/最新性を使用します。タイムスタンプ情報は24時間間隔の解像度で処理されます。時、分、秒は使用されません。 ## 想定される出力 _output_table:_の内容: * *frequency*、*recency*、および_tenure_は日数で測定されることに注意してください。 * _`tenure`_は、顧客が最初にトランザクションを発行してからの日数を表します。 * 今後1、3、6、12、24か月のCLTV(金額)がエクスポートされます。 * パーセンタイルランクは0から100の値を取ります。 * _`automl_alive_prob`_は、現在顧客が活動している確率を表します。 | customerid | frequency | recency | tenure | monetary_value | automl_cltv_1m | automl_cltv_1m_pctile | automl_cltv_3m | automl_cltv_3m_pctile | automl_cltv_6m | automl_cltv_6m_pctile | automl_cltv_12m | automl_cltv_12m_pctile | automl_cltv_24m | automl_cltv_24m_pctile | automl_alive_prob | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 12347 | 6 | 365 | 367 | 599.701667 | 9.753 | 82.832 | 28.97 | 82.832 | 57.086 | 82.832 | 110.856 | 82.832 | 209.203 | 82.832 | 0.998192 | | 12348 | 3 | 283 | 358 | 301.48 | 3.277 | 36.989 | 9.734 | 36.989 | 19.181 | 36.989 | 37.246 | 36.989 | 70.286 | 36.989 | 0.990166 | | 12352 | 6 | 260 | 296 | 368.256667 | 7.203 | 72.581 | 21.394 | 72.581 | 42.157 | 72.581 | 81.863 | 72.581 | 154.486 | 72.616 | 0.996345 | | 12356 | 2 | 303 | 325 | 269.905 | 2.628 | 26.487 | 7.805 | 26.487 | 15.38 | 26.487 | 29.864 | 26.452 | 56.353 | 26.487 | 0.990548 | | 12358 | 1 | 149 | 150 | 683.2 | 6.632 | 69.176 | 19.698 | 69.176 | 38.809 | 69.176 | 75.345 | 69.14 | 142.125 | 69.14 | 0.947 | | 12359 | 3 | 274 | 331 | 1941.693333 | 19.746 | 95.09 | 58.652 | 95.09 | 115.574 | 95.09 | 224.424 | 95.09 | 423.502 | 95.054 | 0.991769 | | 12360 | 2 | 148 | 200 | 789.24 | 9.192 | 80.86 | 27.301 | 80.86 | 53.795 | 80.86 | 104.452 | 80.86 | 197.079 | 80.86 | 0.984178 | | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | 入力パラメータとして_`audience_name`_が指定されている場合、指定されたペアレントセグメントの新しい属性として以下の値が作成されます。`Xm`は数か月後を表します。 * *automl_cltv_Xm* * *automl_cltv_Xm_pctile* * *automl_cltv_segment* * *automl_alive_prob* _`automl_cltv_segment`*は、*`automl_cltv_12m`_を分位数を使用して5つのグループ(very low/low/medium/high/very high)に分割し、5つのCDPセグメントを生成します。 ### グラフ出力の例: ![](/assets/112066641.2a1f1649e3d01a383b836d3c906c90ec5ec10a0de7eddc21e89289f7b17c43b4.3cb60505.png) ![](/assets/112066642.3dd47bd3d02ea9eceab9c71758eb5b4c99c56c9b88635e9cdf8678b6386986ae.3cb60505.png) ## ワークフローの例 [Treasure Boxes](https://github.com/treasure-data/treasure-boxes/blob/automl/machine-learning-box/automl/cltv.dig)でサンプルワークフローを見つけることができます。 ```yaml +run_cltv: ipynb>: notebook: CLTV input_table: ml_datasets.online_retail_txn output_table: ml_results.online_retail_cltv_result user_column: customerid tstamp_column: invoicedate amount_column: purchaseamount ``` ## パラメータ | パラメータ名 | 説明 | 必須 | データ型 | デフォルト値 | 値の例 | | --- | --- | --- | --- | --- | --- | | input_table | CLTV予測に使用するTDテーブルをdbname.table_nameのように指定します | はい | string (dbname.table_name) | | ml_dataset.td_txn | | user_column | ユーザーのカラム名を指定します | いいえ | string | user | user | | tstamp_column | タイムスタンプのカラム名を指定します | いいえ | string | tstamp | time | | amount_column | 購入金額などのトランザクション金額のカラム名を指定します。このカラムのデータは数値が期待されます。 | いいえ | string | amount | purchase_amount | | output_table | CLTV予測結果をエクスポートするTDテーブルをdbname.table_nameとして指定します | いいえ | string (dbname.table_name) | | ml_output.rfm | | discount_rate | 0.0から1.0の範囲の月次調整割引率。0は調整なしを意味します。 | いいえ | float | 0.01 | 0.01 | | hide_table_contents | テーブルの内容の表示を抑制します | いいえ | boolean | false | false | | audience_name | 属性テーブルをマージするオーディエンス名 | いいえ | string | None | master_segment_name | | foreign_key | オーディエンス統合に使用されるマスターセグメントの外部キーカラム名。設定されていない場合はuser_column値が使用されます。 | いいえ | string | None | td_canonical_id | | segment_time_horizon | CLTVセグメントの時間範囲(1m/3m/6m/12m/24m) | いいえ | string | 12m | 6m | _`discount_rate`_パラメータは、[DCF(割引キャッシュフロー)](https://en.wikipedia.org/wiki/Discounted_cash_flow)の概念に基づいています。将来の金額を割引率で割り引いて、そのキャッシュフローの現在価値を取得し、資本コストを調整します。資本コストを回避するには0に設定できます。