関西SASユーザー会 -SASの便利な使い方についてSAS Institute Japan Ltd. Solution Planning Center 東 一成(Kazunari Azuma) Kazunari.Azuma@ sas.com .com Kazunari.Azuma@sas 今回のユーザー会の内容 w 履歴データを用いた顧客ランクの算出 w 顧客の簡単な履歴データを用いて、一般的に流通業など で使われている簡単な分析の例を紹介 – 「デシル分析」 – 「RFM分析」 RFM分析」 w 上記の分析をSAS でどのように行うのかを紹介する。 。 上記の分析をSASでどのように行うのかを紹介する 2 1 デシル分析(decile) decile)とは? w 顧客毎に売上金額などを集計し、10 に分ける 顧客毎に売上金額などを集計し、10に分ける 手法。DECILE とは英語で10 10分位の意味。 分位の意味。 手法。DECILEとは英語で w これにより顧客に10 段階のランク付けを行い、 これにより顧客に10段階のランク付けを行い、 ランク別に売上が多い製品を求めたり、本当に 「2:8」の法則が当てはまっているかを確認した 2:8」の法則が当てはまっているかを確認した りする事が可能。 w 各ランクの顧客の貢献度などを測る。金額だけ の単純な手法であるが、簡単に算出が可能。 3 今回のサンプルデータ w 今回は先のようなデータ を利用した。 – – – – 顧客番号(CUST_ID ) 顧客番号(CUST_ID) 買上日( 買上日(DATE) 商品区分( 商品区分(SYOUHIN) 金額( 金額(PRICE) w 上記の変数で50 万件の 上記の変数で50万件の データを利用してデシル 分析を行っていく。 4 2 デシル分析:ステップ1 データをサマリーする w 顧客ごとの売上ランクを出すために顧客ごと売上高SUMMARY プロシ 顧客ごとの売上ランクを出すために顧客ごと売上高SUMMARYプロシ ジャで算出する。 DAT1 /*顧客ごとに売上金額をサマライズする */ /*顧客ごとに売上金額をサマライズする*/ PROC SUMMARY DATA= DATA=k̲wg. k̲wg.tran NWAY; NWAY; BY cust̲id; cust̲id; VAR price; OUTPUT OUT=dat1(DROP=̲TYPE̲ OUT=dat1(DROP=̲TYPE̲ ̲FREQ̲) SUM=price; SUM=price; RUN; RUN; /*BY では無くCLASS CLASSで処理をすれば事前のソート処理が不要。 で処理をすれば事前のソート処理が不要。 /*BYでは無く ただしCUST̲ID はメモリ上に記憶されるので複数組み合わせる ただしCUST̲IDはメモリ上に記憶されるので複数組み合わせる と、メモリ不足になる場合があります。*/ と、メモリ不足になる場合があります。*/ 5 デシル分析:ステップ2 顧客ごとのランクを算出する w 顧客ランクをRANK プロシジャで算出し、売上が高い順に9 9〜0のランクを 顧客ランクをRANKプロシジャで算出し、売上が高い順に つける。ランクを格納する「RANK 」という変数を追加している。 つける。ランクを格納する「RANK」 DAT2 /*顧客を金額が多い順に 10分割する 分割する*/ */ /*顧客を金額が多い順に10 PROC RANK DATA=dat1 DATA=dat1 GROUP=10 GROUP=10 OUT=dat2; OUT=dat2; RANKS rank; VAR price; RUN; RUN; /*「 」に置き /*「GROUP=10」 GROUP=10」の部分を「PERCENT の部分を「PERCENT」 なおすと、順位を百分率で表します*/ なおすと、順位を百分率で表します*/ 6 3 デシル分析:ステップ3 ランク別に売上金額の統計量を算出する /*RANK 毎の売上金額の統計量算出*/ */ /*RANK毎の売上金額の統計量算出 PROC MEANS DATA=dat2 DATA=dat2 N SUM MEAN MAX MIN MAXDEC= MAXDEC=2; CLASS rank; VAR price; RUN; RUN; 7 Variable price オブザーべション数 合計 平均値 最大値 最小値 ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ 0 1741 18590563.10 10678.09 11591.00 350.00 1 1742 21892418.30 12567.40 13573.50 11592.00 2 1742 25542256.90 14662.60 15840.00 13574.00 3 1742 30007182.70 17225.71 18740.00 15845.00 4 1742 35528189.50 20395.06 22253.50 18746.00 5 1742 42638689.50 24476.86 26948.00 22255.10 6 1742 52335108.80 30043.12 33620.10 26950.00 7 1742 67711786.90 38870.14 45104.00 33639.00 8 1742 97642285.30 56051.83 71670.00 45110.00 9 1742 295833554.60 169824.08 6278049.30 71676.00 ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ デシル分析:ステップ4-1 『2:8』 :8』の法則をグラフで確認する w データ加工 /*RANK 別で売上金額を集計し、高い順にソートする*/ */ /*RANK別で売上金額を集計し、高い順にソートする PROC SUMMARY DATA=dat2 DATA=dat2 NWAY; NWAY; CLASS rank; ランク別の売上集計と売上累計 VAR price; OUTPUT OUT=dat3(DROP=̲FREQ̲ OUT=dat3(DROP=̲FREQ̲ ̲TYPE̲) SUM=price; SUM=price; RUN; RUN; PROC SORT DATA=dat3; DATA=dat3; BY DESCENDING price; RUN; RUN;QUIT; QUIT; /*ランク別の売上金額を累計する */ /*ランク別の売上金額を累計する*/ DATA dat4; SET dat3; RETAIN; RETAIN; id=̲n̲; amount+price; FORMAT amount 12.0; 12.0; 8 RUN; RUN; 4 デシル分析:ステップ4-2 『2:8』 :8』の法則をグラフで確認する w SAS/GRAPHの SAS/GRAPHのGCHARTプロシジャでグラフ作成 GCHARTプロシジャでグラフ作成 /*「 /*「2:8の法則」をグラフで確認 2:8の法則」をグラフで確認 */ OPTIONS DEVICE=GIF; SYMBOL I=JOIN V=DOT; PROC GPLOT DATA=dat4; DATA=dat4; PLOT amount * id/ VZERO /*軸を 0からスタートさせるために必要*/ /*軸を0 からスタートさせるために必要*/ HREF= HREF=1 to 10 by 1 VREF= VREF=0 to 700000000 by 70000000; 70000000; RUN; RUN; QUIT; QUIT; 今回のデモデータでは「2:8の法則」ではな く、「5:8の法則」だった。 9 デシル分析:ステップ4-3 『2:8』 :8』の法則をグラフで確認する w SAS/QCの SAS/QCのPARETOプロシジャでグラフ作成 PARETOプロシジャでグラフ作成 PROC PARETO DATA=dat3; VBAR rank / ANCHOR=TC WEIGHT=price SCALE = PERCENT CBARS =BLUE; RUN; RUN; 製造業などでよく利用されているが、パレート図を 用いると、データ加工処理もそれほど必要なく、 ランク別の売上に対する貢献度をグラフで表示す る事が出来る。 10 5 デシル分析:ステップ5-1 ランクと商品の関係を見てみる w ランクデータを明細トランザクションデータにマージ /*データのマージ */ /*データのマージ*/ ランクデータ 「dat2」 DATA dat5(KEEP=cust̲id dat5(KEEP=cust̲id syouhin price rank ); MERGE k̲wg. k̲wg.tran(IN=in1) tran(IN=in1) dat2(IN=in2); BY cust̲id; cust̲id; IF in1=in2 THEN OUTPUT; OUTPUT; RUN; RUN; 明細データ 「k̲wg.tran」 11 デシル分析:ステップ5-2 ランクと商品の関係を見てみる w データをランク別・商品別に集計 PROC SUMMARY DATA=dat5 DATA=dat5 NWAY; NWAY; CLASS rank syouhin; syouhin; VAR price; OUTPUT OUT=dat6(DROP=̲FREQ̲ OUT=dat6(DROP=̲FREQ̲ ̲TYPE̲) SUM=price SUM=price N=freq; ATTRIB freq LABEL= LABEL="件数" 件数" ; RUN; RUN;QUIT; QUIT; 12 6 デシル分析:ステップ5-3 ランクと商品の関係を見てみる w ランクと商品の関係をグラフで確認する。 度数の累積 OPTIONS DEVICE=GIF; /*パターン 1*/ /*パターン1*/ PROC GCHART DATA=dat5 DATA=dat5 ; VBAR rank / SUBGROUP= SUBGROUP=syouhin DISCRETE; DISCRETE; RUN; RUN; /*パターン 2*/ /*パターン2*/ AXIS1 VALUE=none VALUE=none LABEL=none; LABEL=none; 度数の% PROC GCHART DATA=dat5; DATA=dat5; VBAR rank / TYPE=pct TYPE=pct SUBGROUP= SUBGROUP=syouhin G100 GROUP=rank GROUP=rank NOZERO MAXIS=axis1; MAXIS=axis1; RUN; RUN;QUIT; QUIT; 13 デシル分析:ステップ5-4 ランクと商品の関係を見てみる w ランクと商品の関係を度数集計で見てみる ランク9 比較!! ランク0 /*ランクと商品で 度数集計 集計*/ */ /*ランクと商品で度数 PROC SORT DATA=dat6; DATA=dat6; BY rank DESCENDING price; RUN; RUN; PROC FREQ DATA=dat6 DATA=dat6 order=freq; order=freq; BY rank; WEIGHT freq; TABLES syouhin; syouhin; RUN; RUN; 14 7 デシル分析:ステップ5-5 ランクと商品の関係を見てみる w ランク別に売上金額に貢献している商品をパレート図で見つける。 PROC PARETO DATA=dat6; BY ranK; ranK; ランク9 VBAR syouhin / ANCHOR=TC WEIGHT=price SCALE = PERCENT CBARS =BLUE; RUN; RUN; ランク0 15 デシル分析:まとめ w 今回は、SAS データステップやSAS SASプロシジャを利用して顧 プロシジャを利用して顧 今回は、SASデータステップや 客を10 分割し、各グループがどの程度売上に貢献している 客を10分割し、各グループがどの程度売上に貢献している かを分かるようにした。 w この場合、トップの2 この場合、トップの2〜3グループに対する依存度が高いが、 このような『2:8 の法則』はパレート原理とも呼ばれている。 このような『2:8の法則』はパレート原理とも呼ばれている。 w 顧客の属性データ等を利用すれば、各グループの特徴を知 ることが可能になる。 w 今回は品質管理のソフトウェアであるSAS/QC に含まれる 今回は品質管理のソフトウェアであるSAS/QCに含まれる PARETOプロシジャを利用したが、製造業における品質管 PARETOプロシジャを利用したが、製造業における品質管 理だけではなく、営業活動やマーケティング活動の管理を行 う事もできる。 16 8 RFM分析とは? w RFMによる顧客ランキング RFMによる顧客ランキング – 流通業やサービス業などで良く利用される分析手法。 – 優良顧客を定義するために履歴データの以下の指標を利用する w R(Recency R(Recency))・・・最終利用日 ・・・最終利用日 w F(Frequency)・・・ 頻度 F(Frequency)・・・頻度 w M(Monetary)・・・ 利用金額 M(Monetary)・・・利用金額 – 上記の指標に対して、各企業で定めた指数を掛けて、ポイントを算出する w EX.2週間前に購入は 5ポイント、10 回〜20 20回は 回は10 10ポイント ポイント EX.2週間前に購入は5 ポイント、10回〜 、購入金額が10 万円を超えると10 10ポイント。 ポイント。5 5ポイント+10 、購入金額が10万円を超えると ポイント+10 ポイント+10 ポイント=25 25ポイント ポイント ポイント+10ポイント= – このようなRFM を使う事により、金額だけではなく他の指標を用いて、顧客 このようなRFMを使う事により、金額だけではなく他の指標を用いて、顧客 の分類を行える点でデシル分析より柔軟でもある。 17 RFM分析を工夫する w RFM分析は一般に広く知られている RFM分析は一般に広く知られている – – – Recency Frequency Monetary 直近の購買年月日 購買回数 購買金額 2000/9/1 20回 20回 10万円 10万円 分析者が重み付け!! w 優良顧客は誰? w 顧客ランク= αRm/R *βF/Fm F/Fm*γ *γM/Mm M/Mm Rm/R*β あるターゲットの日から「何日前」にと考える 18 9 今回のサンプルデータ w 今回は先のようなデータ を利用した。 – – – – 顧客番号(CUST_ID ) 顧客番号(CUST_ID) 買上日( 買上日(DATE) 商品区分( 商品区分(SYOUHIN) 金額( 金額(PRICE) w 上記の変数で50 万件の 上記の変数で50万件の データを利用してRFM 分 データを利用してRFM分 析を行っていく。 19 RFM分析:ステップ1 「R」の算出 w 履歴データからR 履歴データからR値を算出する。日付の列で最も大きい値の ものを出力するようにする。 /* R値算出 */ PROC SUMMARY DATA= DATA=k̲wg. k̲wg.tran; tran; VAR date ; BY cust̲id ; OUTPUT OUT=r(KEEP= cust̲id r) MAX=r; OUT=r(KEEP=cust̲id MAX=r; RUN; RUN; 20 10 RFM分析:ステップ2 「F」の算出 w 履歴データから、「F 履歴データから、「F」値を算出する。今回は出現頻度をそのまま利用し ているが、本来であれば同一日であれば何回買い物をしても1 ているが、本来であれば同一日であれば何回買い物をしても1回とみな した方が良いと思われる。その場合はSORT プロシジャ等を利用して重 した方が良いと思われる。その場合はSORTプロシジャ等を利用して重 複行を削除する必要などがある。 /* F値算出 */ PROC SUMMARY DATA= DATA=k̲wg. k̲wg.tran; tran; BY cust̲id ; OUTPUT OUT=f(KEEP= cust̲id ̲freq̲ OUT=f(KEEP=cust̲id RENAME=(̲freq̲=f̲value )); RENAME=(̲freq̲=f̲value)); RUN; RUN; 21 RFM分析:ステップ3 「M」の算出 w 履歴データから「M 履歴データから「M」値を算出する。顧客別に利用金額を集計している。本 来であれば「一定期間内」「6 来であれば「一定期間内」「6ヶ月以内」等の制限がつくと思われる。 /* M値算出 */ PROC SUMMARY DATA= DATA=k̲wg. k̲wg.tran; tran; VAR price ; BY cust̲id ; OUTPUT OUT=m(KEEP= cust̲id m̲value) OUT=m(KEEP=cust̲id m̲value) SUM= SUM=m̲value ; RUN; RUN; 22 11 RFM分析:ステップ4 「R」「F 」「F」「M 」「M」の値の統合 「R」 /* RFM値算出 RFM値算出 */ DATA rfm ; MERGE r f m ; /* 全変数のラベル削除 */ ATTRIB ̲all̲ LABEL= LABEL="" ; 「F」 BY cust̲id; cust̲id; r̲value=INTCK( 'DAY',r, ,r,'28FEB00'd '28FEB00'd); ); r̲value=INTCK('DAY' DROP r; RUN; RUN; 「M」 w 「R」の値には最終購入日が入っているが、「XX から何日 の値には最終購入日が入っているが、「XXから何日 前?」という基準で見るために、INTCK 関数を使い、ある 前?」という基準で見るために、INTCK関数を使い、ある 日付から何日前かを算出している。この場合は「F 日付から何日前かを算出している。この場合は「F」「M 」「M」と 違い、値が小さい方が価値があることに注意が必要。 23 RFM分析:ステップ5 「R」「F 」「F」「M 」「M」の中央値を算出しマクロ変数に格納 w 中央値を算出するのにUNIVARIATE プロシジャを利用 中央値を算出するのにUNIVARIATEプロシジャを利用 している。V8 からはMEANS MEANSプロシジャでも算出可能。 プロシジャでも算出可能。 している。V8からは /* R値の中央値算出 */ /* F値の中央値算出 */ /* M値の中央値算出 */ PROC UNIVARIATE DATA= DATA=rfm NOPRINT; NOPRINT; VAR r̲value f̲value m̲value ; OUTPUT OUT= OUT=tmp MEDIAN= MEDIAN=m̲r m̲f m̲m; m̲m; /* R値中央値マクロに格納 */ /* F値中央値マクロに格納 */ /* M値中央値マクロに格納 */ RUN; RUN; DATA ̲NULL̲ ; QUIT; QUIT; SET tmp ; CALL SYMPUT('m̲r' ,put(m̲r m̲r, ,best.)) SYMPUT('m̲r',put( best.)) ; CALL SYMPUT('m̲f' ,put(m̲f m̲f, ,best.)) SYMPUT('m̲f',put( best.)) ; CALL SYMPUT('m̲m' ,put(m̲m m̲m, ,best.)) SYMPUT('m̲m',put( best.)) ; RUN; RUN; w 24 マクロ変数に中央値に格納する事により 、データセットとマージする必要も無く、こ の後の処理ですぐに活用できる。 12 RFM分析:ステップ6 「R」「F 」「F」「M 」「M」の値より顧客ランクを算出 w 最終的に算出する顧客ランクは大きい値の方が良いので、「R 最終的に算出する顧客ランクは大きい値の方が良いので、「R」の使い 方に注意が必要。また重視したい指標に重みを加えても良い。 /* R値、F ポイントのデータセット完成 */ 値、F値、M 値、M値、RFM 値、RFMポイントのデータセット完成 DATA rfm̲point ; SET rfm ; rfm̲value=(& m̲r/ /r̲value * f̲value/& m̲f * m̲value/& m̲m)** )**( (1/3) ; rfm̲value=(&m̲r f̲value/&m̲f m̲value/&m̲m LABEL cust̲id= cust̲id=‘顧客番号’ 顧客番号’ r̲value= r̲value='R値 'R値' f̲value= f̲value=‘F値’ m̲value= m̲value='M値 'M値' rfm̲value= '; rfm̲value='RFMポイント 'RFMポイント' FORMAT rfm̲value 8.2; 8.2; RUN ; 25 RFM分析:ステップ7 「R」「F 」「F」「M 」「M」の値に主観的な指標をつける w SASのフォーマットの機能を利用して、 「F」と「M SASのフォーマットの機能を利用して、「 と「M」に 対して、ランク付けを行う。 /*良く行われるランク付け */ /*良く行われるランク付け*/ PROC FORMAT; FORMAT; VALUE f̲rank LOW‑ ; LOW‑10= 10='F̲RANK1' 11‑ 11‑18= 18='F̲RANK2' 19‑ 19‑30= 30='F̲RANK3' 31‑ 31‑60= 60='F̲RANK4' 61‑ 61‑HIGH='F̲RANK5' HIGH='F̲RANK5'; VALUE m̲rank LOW‑ LOW‑14487= 14487='M̲RANK1' 14488‑ 14488‑21637= 21637='M̲RANK2' 21638‑ 21638‑36260= 36260='M̲RANK3' 36261‑ 36261‑68905= 68905='M̲RANK4' 68905‑ ; 68905‑HIGH='M̲RANK5' HIGH='M̲RANK5'; RUN; RUN; QUIT; QUIT; ポイントの切り口は、下記のような分布のグラフを書いて決定していく事も考えられる 26 13 RFM分析:ステップ8-1 フォーマットを利用して「F フォーマットを利用して「F」「M 」「M」のランクの分布を見る /*ランク付けのクロス集計表 */ /*ランク付けのクロス集計表*/ PROC FREQ DATA= DATA=rfm̲point; rfm̲point; FORMAT f̲value f̲rank. f̲rank. m̲value m̲rank. m̲rank.; TABLES f̲value * m̲value; m̲value; RUN; RUN;quit; quit; w 当然のことながら、「f_rank5 」 当然のことながら、「f_rank5」 「m_rank5」 m_rank5」の組み合わせの 人が最も良い顧客と想定でき る。 27 RFM分析:ステップ8-2 フォーマットを利用して「F フォーマットを利用して「F」「M 」「M」のランクの分布を見る OPTIONS DEVICE=GIF; PROC gchart DATA= DATA=rfm̲point; rfm̲point; where m̲value ne .; BLOCK f̲value/ f̲value/DISCRETE GROUP= GROUP=m̲value COUTLINE=BLACK; COUTLINE=BLACK; FORMAT f̲value f̲rank. f̲rank. m̲value m̲rank. m̲rank.; RUN; RUN; QUIT; QUIT; w 「F」「 M」の各ランクをグラフで 「F」「M」の各ランクをグラフで 表現している。他にも「R」 表現している。他にも「R」や年 齢などの属性と組み合わせる ことにより、色々な事が分かっ てくると思われる。 28 14 RFM分析まとめ w RFM分析自体は過去から使われてきているので、 RFM分析自体は過去から使われてきているので、 手法自体は最新のものではない。 w ただ、今回のサンプルデータのように「顧客ID 」「日 日 ただ、今回のサンプルデータのように「顧客ID」「 付」「商品」「値段」程度の情報からでも、何とかし て顧客をセグメントするための値として活用する事 が出来る。 w 履歴データとは今回のようなPOS データだけでは 履歴データとは今回のようなPOSデータだけでは なく、Web ログ関連のようなデータでも、SAS SASデー デー なく、Webログ関連のようなデータでも、 タセットに取り込めれば活用が可能。 29 15 本日の資料・サンプルプログラム・サンプルデータ(小さく縮小してあります)は 以下のURLから取得できます。(曜日の昼くらいから閲覧可能) http://www.sas .com/japan japan/ /usergroups/ http://www.sas.com/ usergroups/wg/archive/index.html wg/archive/index.html 31 16
© Copyright 2024 Paperzz