last update: 2004年11月29日
概要:RFM分析用データの作成
書式:xtrfm [-c 顧客ID項目名] [-d 日付項目名] [-D 基準日付] [-m 金額項目名] [-p 期間] [-R Recencyのクラス数] [-F Frequencyのクラス数] [-M Monetaryのクラス数] [-i入力ファイル名] [-o 出力ファイル名][-V] [-h]
-c 顧客ID項目名 : 顧客IDを示す項目名を指定する(複数項目の指定可能)省略時は"顧客"という項目名を利用する。
-d 日付項目名 : 顧客の訪問日を示す項目名を指定する。省略時は"日付"という項目名を利用する。
-D 基準日付 : Recencyを計算するための基準日。YYYYMMDDの形式で指定する。Recencyは、「基準日付」−「顧客の最終訪問日」で計算される日数により定義される。省略時は本日の日付が用いられる。
-m 金額項目名 : 顧客の購入金額を示す項目名を指定する。省略時は"金額"という項目名を利用する。
-R : Recencyを何個のクラスに分割するか(デフォルトは5)
-F : Frequencyを何個のクラスに分割するか(デフォルトは5)
-M : Monetaryを何個のクラスに分割するか(デフォルトは5)
-i 入力ファイル名 : ワイルドカードが利用できる。
-o 出力ファイル名 : 出力ファイル名
-V : スクリプト内部のコマンド完了メッセージを表示させる。
-h : ヘルプの表示
解説:RFM分析の元となるデータを作成する。顧客別に、Recency(最新購買日), Frequency(購買頻度), Monetary(購買金額)を求め、またそれぞれについて顧客人数がなるべく均等になるように分割したクラスを求める。MUSASHI-SCENARIOにおけるRFM分析ではより詳しい設定や出力が可能である。
利用するデータは以下に示すような、顧客購買履歴データである。レシートの一行が一レコードに対応するデータである。この分析で利用する項目は、「顧客ID」、「日付」、「金額」の3項目のみである。その他の項目は一切利用しない。といっても入力データに含まれていても問題はない。
顧客 | 日付 | 時刻 | 商品 | 個数 | 金額 |
A001 A001 A001 A005 A005 A001 A001 A001 |
20040105 20040105 20040105 20040105 20040105 20040108 20040108 20040108 |
101521 101521 101521 102201 102201 131152 131152 131152 |
パン 牛乳 バター 野菜 ポン酢 ヨーグルト 牛乳 菓子パン |
2 2 1 3 1 1 1 2 |
220 352 253 230 450 98 110 298 |
また、顧客ID別日付別に金額が集計された以下のような表であっても問題ない。
顧客 | 日付 | 個数 | 金額 |
A001 A005 A001 |
20040105 20040105 20040108 |
5 4 4 |
825 680 506 |
xtrfm -i dat.xt -o rsl.xt
顧客 | Recency | Frequency | Monetary | Rclass | Fclass | Mclass |
A00001 | 10 | 2 | 5128 | 5 | 2 | 1 |
A00002 | 6 | 5 | 16077 | 5 | 3 | 3 |
A00003 | 84 | 3 | 8991 | 4 | 2 | 2 |
A00004 | 76 | 6 | 15809 | 4 | 3 | 3 |
A00005 | 99 | 2 | 5045 | 4 | 2 | 1 |
A00006 | 104 | 2 | 3559 | 4 | 2 | 1 |
A00007 | 2 | 6 | 12643 | 5 | 3 | 2 |
A00008 | 251 | 2 | 7502 | 2 | 2 | 2 |
A00009 | 16 | 6 | 15668 | 5 | 3 | 3 |
A00010 | 12 | 5 | 26140 | 5 | 3 | 4 |
A00011 | 205 | 1 | 5095 | 3 | 1 | 1 |
A00012 | 29 | 10 | 58129 | 5 | 4 | 5 |
A00014 | 123 | 6 | 28651 | 4 | 3 | 4 |
A00015 | 95 | 4 | 22836 | 4 | 3 | 4 |
A00016 | 14 | 3 | 9608 | 5 | 2 | 2 |
A00017 | 99 | 13 | 63478 | 4 | 5 | 5 |
A00018 | 119 | 5 | 21045 | 4 | 3 | 4 |
A00019 | 112 | 3 | 13346 | 4 | 2 | 3 |
A00020 | 10 | 6 | 25777 | 5 | 3 | 4 |
以下のようにスクリプト内でパイプで連結することも可能である。
#!/usr/bin/env bash xtsel -c '$性別==0' -i input.xt | xtrfm.sh | xtcut -f Rclass,Fclass,Mclass -o output.xt |