以前もこちらの記事でカスタマーライフタイムバリュー(CLV)について解説記事を書きました。本稿は商材の中でも特にCLVの予測が難しい「非契約型商材」のCLVの算出に関して解説しています。

CLV概要

Customer Lifetime Value(CLV)は顧客が生涯に渡ってある企業に支払う価値の総和です。

以前はLTVと略することが多かったのですが、最近はCLVとすることの方が多いようです。

CLVは生涯価値であるため、未観測事象に対する予測が必要です。

以下の例で具体的なイメージを掴みます。

スマートフォンの売上(あるキャリア)

2年で更新するものとする。月の売上を10,000円とする。更新率を75%とする。10年で更新終了とする。(つまり4回更新する)

LTV = 10000*12*2+0.75*10000*12*2+…+0.75^(4)*10000*12*2 = 24000 + 18000 + 13500 + 10125 + 7593.75 = 73218.75円

トイレットペーパーの売上(ブランド横断)

1家庭2日で1ロール消費するとする。6ロール入り600円とする。30年間消費するとする。一日あたりの金額 = 600/(2*6) = 50として、LTV = 50*365*30 = 547,500円

マーケティングにおいて長期的な指標として重要です。

最近ではCLVで顧客ポートフォリオの評価を行いファイナンスに活用するなどのアイデアも考えられているようです。

予測CLVは一般的にt時点の売上関数S(t)の総和として書けます。

S(t)を記述することは難しいため、簡単な仮定を置き以下の式で定義します。

  1. 顧客Aの予測CLV = 1期目予測購買額 + 2期目予測購買額 × 1期目継続率 +
    +3期目予測購買額× 2期目継続率 …
    +n期目予測購買額 × n-1期目継続率 → 予測購買額を一定と仮定して
  2. 顧客Aの予測CLV = 予測購買額 × (1 + 1期目継続率 + 2期目継続率 +…+ n-1期目継続率) → 継続率を一定として
  3. 顧客Aの予測CLV = 予測購買額 × (継続率^(0) + 継続率^(1) + 継続率^(2) +…+継続率^(n-1)) → 等比級数の公式を適用して
  4. 顧客Aの予測CLV = 予測購買額 × {1-継続率^(n)} / (1-継続率) → n→∞として
  5. 顧客Aの予測CLV = 予測購買額 × 1 / (1-継続率)

となります。つまり以下のように簡便な式で表せます。

CLVを大きくするには「購買単価を上げる or 購買回数を上げる or 継続率を上げる」という自明なことが式から示されます。つまりこの定義式は妥当とえいます。

商材の分類

購買単価、回数、継続率を算出する方法は商材によりことなります。

購買単価などの推定難易度も異なります。

非契約型商材は明確な離脱が観測できないためCLVの計算が困難です。

非契約型商材に対してのCLV推定方法のフレームワークとして「Buy Till you Die」 (死までの購買) モデルというものがあります。

  • 生存率とリピート購買数をそれぞれモデル化する
  • 購買単価を上記2つとは別にモデル化する
  • それらを掛け合わせCLVを求める

lifetimes パッケージ

pythonのLifetimesパッケージはBuy Till you Dieモデルを用いたCLV推定を行うパッケージです。

https://lifetimes.readthedocs.io/en/latest/index.html

Lifetimes パッケージは以下の考え方にもとづきます。

* ポアソン分布のパラメータλがΓ(r,α)分布に従うと、λで積分すると負の二項分布になる 興味ある方はhttps://www.slideshare.net/simizu706/ss-50994149 を参照。

lifetimesパッケージでは一般的な定義と異なるRFを使用します。

M (Monetary)の定義は様々ありますが、lifetimesパッケージでは購買があった1単位時間あたり (先の例では1日あたり) の平均購買金額を用います。

トランザクションデータをRFM(T)の形に変形したものを使用します。

* 上記データはUC Irvine Machine Learning Repository 「Online Retail」 data https://archive-beta.ics.uci.edu/ml/datasets/online+retail

lifetimes パッケージ 実践

UCI 「Retail Online」データを用いたCLV算出のプロセスを実践します。以降は「https://towardsdatascience.com/buy-til-you-die-predict-customer-lifetime-value-in-python-9701bfd4ddc0 」の内容やコードを参考にしています。

データのダウンロードとgoogle coloboratoryの環境設定を行います。

まずはじめにデータをDLとし、google drive上において当該driveをcoloboratoryからマウント(使用できるように)します。

  1. https://archive-beta.ics.uci.edu/ml/datasets/online+retail よりDLする。
  2. DLしたCSVをGoogle driveの適当な場所におく。
  3. Google coloboratory から以下を実行する。

lifetimesパッケージのインストールと関連ライブラリのimportを行います。

データの読み込みと中身を確認します。

欠損除去などのデータクリーニングを行います。

単価と数量を乗して収益を算出します。

具体例でRFを確認してみます。

トランザクションデータをRFMデータに変換します。

RFとTの分布を確認します。

購買回数と継続率のモデリングを行います。

購買数の予測値と実績値を比較します。

現時点からt期間後の予測購買数の分布を確認します。

継続率の分布を確認します。

ある特定のユーザの継続率の推移を確認します。

予測購買単価(日次単価)のモデリングを行います。

購買額には以下の仮定を置きます。

  1. 顧客ごとに購買額の平均は異なる
  2. 但しその平均額は時間によらない、その平均額を中心に分布する

事前準備を行います。

データの加工

Monetaryとfrequencyは独立であることを仮定するため相関係数を確認する

モデリングを行い、パラメータを推定します。

購買額、購買回数、継続率を付与して確認します。

CLVを計算します。

翌12か月分の推定CLVの平均は2938.178£(日本円で467333.37円、つまり1000人の顧客がいれば翌12か月に約5億円の収益が見込める)

CLVの分布を確認します。

長々とお付き合いありがとうございました。

ECサイトなどの離脱が明確に観測できない商材に対して有効な力を発揮します。

投稿者プロフィール

株式会社Crosstab 代表 漆畑充
株式会社Crosstab 代表 漆畑充
当ブログは【アナリティクスやデータの総合的な活用を通じて「未知の知」の獲得に貢献する】株式会社Crosstabが作成しています。

筆者について
2007年より金融機関向けデータ分析業務に従事。与信及びカードローンのマーケテイングに関する数理モデルを作成。その後大手ネット広告会社にてアドテクノロジーに関するデータ解析を行う。またクライアントに対してデータ分析支援及び提言/コンサルティング業務を行う。
統計モデルの作成及び特にビジネスアウトプットを重視した分析が得意領域である。
お問い合わせは株式会社Crosstabまでお願いいたします。