last update: 2004年11月29日

xtrfm.sh

概要: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