きれいなデータを作る仕組み。Talendを使ってみる。 ~その3~

こんにちは 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つをそれぞれ計算するジョブと、talend01

2つ目は、1つめで出力された結果を、1つのファイルに纏めるためのジョブです。

talend02

また、今回のRFM分析を行うデータは下記です。ベースは前回(その2)で作成したデータを基にしています。(意外と地味に頭を使う作業でした。。)

talend03

■R:リーセンシー(最新購入日)を計算する


リーセンシー(最新購入日)は1つ目のジョブの以下の流れで構成しました。

talend04

①はtSortRowコンポーネントを使い、入力したデータを並び替えます。

コンポーネントの設定にて、購入年月日を最新の日付から並べるように設定talend05

②はUniqRowコンポーネントを利用し、設定した基準をベースに入力したデータを一意に絞ります。

一意になる項目として「顧客名」を基準にして、処理を行います。
①にて、購入年月日で順序を入れ替えてますので、最新の日付だけ(一番初めに処理データのみ)を取得するようにします。
例えば、以下の株式会社BBBのデータであれば、赤枠の部分だけが残るようにします。

talend06

ジョブでの設定は以下の通りです。これにて、顧客毎の最新購入日が計算されます。

talend07

③では顧客を色付けします。

顧客の最新購入日を現在日付と比較して色付けを行います。

顧客の最新購入日が、現在日付より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"

④で出力されるデータは以下になります。

talend08

■F:フリークエンシー(累積購買回数)を計算する


フリークエンシー(累積購買回数)は1つ目のジョブの以下の流れで構成しました。

talend09

①はtAggregateRowコンポーネントを利用し、入力したデータを設定した基準で集計を行います。

今回は、顧客でグループ化して一意にする値「注文ID」で購入回数を集計します。

talend10

②では顧客を色付けします。

顧客の累積購買回数を比較して色付けしています。

顧客の累積購買回数が、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"

③で出力されるデータは以下になります。

talend11

■M:マネタリー(累積購買金額)を計算する


マネタリー(累積購買金額)は1つ目のジョブの以下の流れで構成しました。

talend12

①はtAggregateRowコンポーネントを利用して入力したデータを設定した基準で集計を行います。
ここも顧客ごとにグループ化し、購入額をサマリーして累積購買金額を集計します。

talend13

②では顧客を色付けします。

顧客の累積購買金額を比較して色付けしています。

顧客の累積購買金額が、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"

③で出力されるデータは以下になります。

talend14

■RFM分析を考えてみる


2つ目のジョブで、1つ目のジョブで作成された3つのファイルを1つにまとめます。
出力されるデータは以下になります。(Excel形式で出力しました)

talend15

顧客への色付けの結果から、顧客をRFM分析してみます。
(あくまでも考え方の例です。)

株式会社AAA
最近購入したが、購入回数も購入金額も少ない。
新規顧客としたら、優良顧客にするために次購入を促す活動を行う。

株式会社BBB
どの値も高いランクにある。いわゆる優良顧客となる。

G籐 T子
リーセンシー(最新購入日)が低い。
最近購入が無いため、競合に奪われた可能性も考えられる。

■今回のまとめ


TalendでRFM分析を実装してみました。

今回、tAggregateRowコンポーネント、tSortRowコンポーネント、UniqRowコンポーネントの3つを新しく利用してみました。コンポーネントがどのような働きをするかイメージできましたでしょうか?

次回は、一旦、Talendから離れた題材にしようと思います。

次回をお楽しみに!