Science2017.12.24ツイートこんにちは。データサイエンスチームのYamakawaです。データサイエンスチームは日々、色々なお客様からご相談をいただいています。手元のメモを見ると一番多かったパターンは、小売業でID-POSデータを活用できていない、というものでした。ID-POSデータとはID-POSデータとは何かの前にPOSデータとは何かを軽く見ていきます。POSデータとは一言で言うと、店のレジで商品が販売されたときに記録されるデータです。具体的には「何が、いつ、何個、いくらで売れたのか」が記録されます。それだけでは十分じゃないケースが増えてきました。「誰が買ったのか」という顧客側の情報が無いのです。その情報が追加されると「ID-POS」になります。皆さんの財布の中にポイントカードが一枚でもあれば、きっとそれはシステムの裏側でID-POSデータを作り出しています。消費者にとってはポイントが得られるなどのメリットがあるわけですが、ID-POSデータを入手することによって事業者にはどんなメリットがあるのでしょうか?たとえば、ある店舗である消費者が今日1,000円の買い物をしたとしましょう。ここからわかることは大して多くありません。その消費者が1)昨日も一昨日も、ほぼ毎日1,000円の買い物をしている場合2)月一回くらいしか来店しないが、3回に一回は50,000円ほどの買い物をしている場合3)初めて店に来た場合だったらどうでしょうか。1)の消費者は頻繁に来てくださっているので、お友達紹介キャンペーンを企画したらすごい効果が生まれるかもしれません。2)の消費者はビッグユーザーなので、掘り出し物の案内を差し上げると興味をもたれるかもしれません。3)の消費者は一見さんなので、どういう方かわかりません。次回の来店を待ってどういうお客様か理解しましょうといったアプローチが考えられます。RFM分析ID-POSデータを分析する際によく使われるフレームワークがRFM分析で、R(Recency):もっとも最近購入された年月日F(Frequency):過去1年などの一定期間における購入回数M(Monetary):一定期間での購買金額合計を消費者ごとに集計し、R,F,Mの値が高い消費者と低い消費者でアプローチを変えます。先の例では、今日買い物をしている消費者なので、Rは良い値です。その上で1)Fは高い、Mは低い2)Fは低い、Mは高い3)FもMも低いとなります。RFM分析の難しさとまあ、こういった記述は、マーケティングの本を何冊か読めば必ず書いてあるくらいでして、RFM分析は非常に一般的な手法です。使いこなすのが難しい。筆者は過去に10社ほどの小売業のお客様と関わる機会がありましたが、RFM分析を十分なレベルで実施して施策に反映させているケースは皆無でした。ための「実践データ分析」』講談社)しかし、それ以上の具体的な指針、RやFやMの値がどれくらいであれば、どういう消費者であり、マーケティング施策に対してどれくらい効果が期待できるの数字を推測するのが難しいのです。BYTDパッケージRFM分析が上手くできない、結果としてID-POSデータを持て余している小売業の方は多いのではないでしょうか。そんな方にお勧めなのがRのBYTDパッケージです。これを用いると、ID-POSデータから「どの消費者が今後どれくらい来店し、いくらくらい使ってくれるか」を推測することが出来ます。パッケージでは(そして後継のBYTBplusでは)様々な手法が扱えますが、ここでは一番計算量が少ないPareto/NBDを用います。Pareto/NBDでは以下の3つの仮定を置いています。顧客の異質性は2編量独立ガンマ分布を仮定するこの仮定が実態の消費者行動を表しているかは所論有って、結果他の手法も提案されているのですが、そちらに触れるとキリが無いので割愛します。必要なライブラリをインストールしましょう。library(BTYD)library(dplyr)library(magrittr)library(knitr)分析用のにはBTYDパッケージ組み込みのCD-NOWのデータを用います。dc.ReadLines関数は、顧客ID、日付、売上がある行番号を指定して取り込みます。dateがデフォルトではchrなので、date型に変換します。elog後の処理用にelogデータを別名で保存しておきます。同じ日に同じcustで2件以上のデータが存在します。ここでは、消費者が一日あたりいくら購買したかを見たいので、salesをマージします。dc.MergeTransactionsOnSameDateはそのための関数です。1custは消費者コード、nはマージ後のデータ件数、n0はマージする前のデータ件数です。cust:1059についてみてみましょう。11.99cust:1059は1997/2/9に二回来店しており、分析上は二回の売上の合計値150.66ドルを用います。CD-DATAは18ヶ月から成るデータなので前半分、1997/09/30までのデータを学習用に用います。split.data$repeat.trans.elog次に、顧客がいつ購入したかを示すマトリクスを作成します。0142行目の1997/1/8と1997/1/9に「1」があるのは、この日にcust:142の消費者が購買を行ったことを意味します。前処理の最後として、dc.BuildCBSFromCBTAndDates関数で、Frequency(x)、Recency(t.x)、合計時間(T.cal)の3つの列からなるデータフレームを作ります。pnbd.EstimateParameters(cal.cbs)パラメータを推測します。このパラメータを使うと、例えば新規の消費者が一年間で平均何回来店するかの値が導出できます。t=52)1.473という値が得られました。マーケティング的には既存の消費者の挙動が気になるところです。顧客番号1516が、今後1年間で行う取引数の期待値は25.45回となります。実際はどうだったか比較したいのですが、CD-NOWデータにある将来データは9が月分しかありません。期間を39週間にしてやり直します。T.cal)顧客番号1516が、今後39週間で行う取引数の期待値は20.12回、期待購買金額は575ドルとなります。実データでは31回、1050ドルだったので、控えめな見積もりがされていることが分かります。精度を上げるための様々なモデルが提唱されています。他のモデルについても、別途ご紹介できればと思います。