こんにちは Coffeeです。
前回は、Talend(タレンド)の具体的な処理の例について説明をし、自前の「汚いデータ」を「きれいなデータ」にしてみました。(前回記事)
これまで使用してきたTalend(Talend Open Studio for Data Integration 6.3)には、コンポーネントと呼ばれる、事前に定義されたデータ処理を行う部品が含まれており、このコンポーネントを組み合わせてデータ加工処理を作成します。
今回は、コンポーネントを組み合わせて、RFM分析のための処理を作成してみたいと思います。
■Talendで用意されているコンポーネント
Talendで用意されている主なコンポーネントをご紹介します。
ビジネスコンポーネント
CRMまたはERPのデータベースの読み取り及び書き込みが行え、例えば、SAPシステムなどのERPシステムからデータを読み取ったり、書き込んだりするようなビジネスニーズをカバーするコネクタです。
Open StudioにはJIRAとSalesforceのコンポーネントが用意してありました。
データクオリティコンポーネント
データの品質を向上させるコンポーネントです。一意の行にフィルタして、CRCの計算、ファジーマッチのデータ検索などのニーズに対応しています。
データベースコンポーネント
データベースとの接続、テーブルからデータの読み込みおよび書き込み、トランザクションの確定、エラー処理のロールバックの実行などができます。
現在、20種類以上のデータベースをサポートしているようです。(詳細はTaled社のHPでご確認ください。)
※前回の記事でこのコンポーネントを利用しました。
ファイルコンポーネント
あらゆるタイプのファイルの読み込みおよび書き込みができます。
また、ファイル自体の解凍、削除、コピー、比較等を行うコンポーネントも用意されています。
※これまでの記事で、入出力を行う際にこのコンポーネントを利用していました。
変換処理コンポーネント
集計、マッピング、変換、非正規化、フィルタリングなどデータフロー類の処理タスクを実行する上で役に立つコンポーネントです。
処理のほとんどをこのコンポーネント群から選択し、データ連携処理を実施する形となります。
■RFM分析とは何か
RFM分析は、データベースマーケティングで使われるもので、顧客の購買行動を分析する手法のことです。
参考HP:http://www.itmedia.co.jp/im/articles/0308/28/news004.html
余談ですが、私が初めて「RFM分析」を耳にしたのは、とあるデータ分析会社でお仕事をさせていただている時でした。そのデータ分析会社では「これぐらいの基本は知ってないとね」ということで、データベースマーケティングの基本として教えてもらいました
R:リーセンシー(最新購入日)
F:フリークエンシー(累積購買回数)
M:マネタリー(累積購買金額)
いつ買ったか、どのくらいの頻度で勝ったか、どれくらいお金を使っているか。この3つの要素で顧客を色付けします。そうして、顧客の属性ごとにマーケティングを行う指標にします。
今回の例は、RFMの要素毎に最も良い顧客をランク5として、最低ランクの顧客をランク1として色付けするようにしたいと思います。
■JOBの解説
実業務で、RFM分析で顧客を色付けする基準は、業界、扱う商品、市場状況など様々な要素で異なります。そのため、これから解説するRFM分析の方法はあくまでも参考です。
今回、RFM分析を行うのに2つのジョブを使って実現します。
1つ目は、R(最新購入日)、F(累積購入回数)、M(累積購入金額)の3つをそれぞれ計算するジョブと、
2つ目は、1つめで出力された結果を、1つのファイルに纏めるためのジョブです。
また、今回のRFM分析を行うデータは下記です。ベースは前回(その2)で作成したデータを基にしています。(意外と地味に頭を使う作業でした。。)
■R:リーセンシー(最新購入日)を計算する
リーセンシー(最新購入日)は1つ目のジョブの以下の流れで構成しました。
①はtSortRowコンポーネントを使い、入力したデータを並び替えます。
コンポーネントの設定にて、購入年月日を最新の日付から並べるように設定
②はUniqRowコンポーネントを利用し、設定した基準をベースに入力したデータを一意に絞ります。
一意になる項目として「顧客名」を基準にして、処理を行います。
①にて、購入年月日で順序を入れ替えてますので、最新の日付だけ(一番初めに処理データのみ)を取得するようにします。
例えば、以下の株式会社BBBのデータであれば、赤枠の部分だけが残るようにします。
ジョブでの設定は以下の通りです。これにて、顧客毎の最新購入日が計算されます。
③では顧客を色付けします。
顧客の最新購入日を現在日付と比較して色付けを行います。
顧客の最新購入日が、現在日付より2か月以内の場合はランク5。
顧客の最新購入日が、現在日付より4か月以内の場合はランク4。
顧客の最新購入日が、現在日付より6か月以内の場合はランク3。
顧客の最新購入日が、現在日付より8か月以内の場合はランク2。
顧客の最新購入日が、現在日付より10か月以内の場合はランク1。
Talend(タレンド)の処理に置き換えると以下のようになります。
(TalendDate.compareDate(row3.購入年月日,TalendDate.addDate(TalendDate.parseDate("yyyy-MM-dd",TalendDate.getDate("yyyy-MM-dd")) ,-2,"MM") ) >=1)? "5" : (TalendDate.compareDate(row3.購入年月日,TalendDate.addDate(TalendDate.parseDate("yyyy-MM-dd",TalendDate.getDate("yyyy-MM-dd")) ,-4,"MM") ) >=1)? "4" : (TalendDate.compareDate(row3.購入年月日,TalendDate.addDate(TalendDate.parseDate("yyyy-MM-dd",TalendDate.getDate("yyyy-MM-dd")) ,-6,"MM") ) >=1)? "3" : (TalendDate.compareDate(row3.購入年月日,TalendDate.addDate(TalendDate.parseDate("yyyy-MM-dd",TalendDate.getDate("yyyy-MM-dd")) ,-8,"MM") ) >=1)? "2" : (TalendDate.compareDate(row3.購入年月日,TalendDate.addDate(TalendDate.parseDate("yyyy-MM-dd",TalendDate.getDate("yyyy-MM-dd")) ,-10,"MM") ) >=1)? "1" : "0"
④で出力されるデータは以下になります。
■F:フリークエンシー(累積購買回数)を計算する
フリークエンシー(累積購買回数)は1つ目のジョブの以下の流れで構成しました。
①はtAggregateRowコンポーネントを利用し、入力したデータを設定した基準で集計を行います。
今回は、顧客でグループ化して一意にする値「注文ID」で購入回数を集計します。
②では顧客を色付けします。
顧客の累積購買回数を比較して色付けしています。
顧客の累積購買回数が、10回以上の場合はランク5。
顧客の累積購買回数が、8回以上の場合はランク4。
顧客の累積購買回数が、6回以上の場合はランク3。
顧客の累積購買回数が、4回以上の場合はランク2。
顧客の累積購買回数が、2回以上の場合はランク1。
Talend(タレンド)の処理に置き換えると以下のようになります。
(row4.購入回数 >10)? "5" : (row4.購入回数 >8)? "4" : (row4.購入回数 >6)? "3" : (row4.購入回数 >4)? "2" : (row4.購入回数 >2)? "1" : "0"
③で出力されるデータは以下になります。
■M:マネタリー(累積購買金額)を計算する
マネタリー(累積購買金額)は1つ目のジョブの以下の流れで構成しました。
①はtAggregateRowコンポーネントを利用して入力したデータを設定した基準で集計を行います。
ここも顧客ごとにグループ化し、購入額をサマリーして累積購買金額を集計します。
②では顧客を色付けします。
顧客の累積購買金額を比較して色付けしています。
顧客の累積購買金額が、10,000円以上の場合はランク5。
顧客の累積購買金額が、8,000円以上の場合はランク4。
顧客の累積購買金額が、6,000円以上の場合はランク3。
顧客の累積購買金額が、4,000円以上の場合はランク2。
顧客の累積購買金額が、2,000円以上の場合はランク1。
Talend(タレンド)の処理に置き換えると以下のようになります。
(row6.購入額 >10000)? "5" : (row6.購入額 >8000)? "4" : (row6.購入額 >6000)? "3" : (row6.購入額 >4000)? "2" : (row6.購入額 >2000)? "1" : "0"
③で出力されるデータは以下になります。
■RFM分析を考えてみる
2つ目のジョブで、1つ目のジョブで作成された3つのファイルを1つにまとめます。
出力されるデータは以下になります。(Excel形式で出力しました)
顧客への色付けの結果から、顧客をRFM分析してみます。
(あくまでも考え方の例です。)
株式会社AAA
最近購入したが、購入回数も購入金額も少ない。
新規顧客としたら、優良顧客にするために次購入を促す活動を行う。
株式会社BBB
どの値も高いランクにある。いわゆる優良顧客となる。
G籐 T子
リーセンシー(最新購入日)が低い。
最近購入が無いため、競合に奪われた可能性も考えられる。
■今回のまとめ
TalendでRFM分析を実装してみました。
今回、tAggregateRowコンポーネント、tSortRowコンポーネント、UniqRowコンポーネントの3つを新しく利用してみました。コンポーネントがどのような働きをするかイメージできましたでしょうか?
次回は、一旦、Talendから離れた題材にしようと思います。
次回をお楽しみに!