例: 顧客データのセグメント化
この項の例では、期待値最大化クラスタリング・モデルを使用し、共通の特徴に基づいて顧客データをセグメント化します。
例5-7 顧客セグメントの計算
この問合せでは、顧客の自然なグループが計算され、各グループの顧客数が戻されます。em_sh_clus_sampleモデルは、oml4sql-clustering-expectation-maximization.sql
の例によって作成されます。
SELECT CLUSTER_ID(em_sh_clus_sample USING *) AS clus, COUNT(*) AS cnt FROM mining_data_apply_v GROUP BY CLUSTER_ID(em_sh_clus_sample USING *) ORDER BY cnt DESC;
出力内容は次のようになります。
CLUS CNT
---------- ----------
9 311
3 294
7 215
12 201
17 123
16 114
14 86
19 64
15 56
18 36
例5-8 最大セグメントに含まれる可能性が最も高い顧客の検出
例5-7の問合せは、セグメント9が最も多くの顧客を含むことを示しています。次の問合せでは、セグメント9に含まれる可能性が最も高い5人の顧客がリストされます。
SELECT cust_id FROM (SELECT cust_id, RANK() over (ORDER BY prob DESC, cust_id) rnk_clus2 FROM (SELECT cust_id, ROUND(CLUSTER_PROBABILITY(em_sh_clus_sample, 9 USING *),3) prob FROM mining_data_apply_v)) WHERE rnk_clus2 <= 5 ORDER BY rnk_clus2;
出力内容は次のようになります。
CUST_ID
----------
100002
100012
100016
100019
100021
例5-9 最大クラスタ内の代表的な顧客の主要な特徴の検出
例5-8の問合せでは、セグメント9に含まれる可能性が高い顧客のリストの最初に顧客100002が挙げられています。次の問合せでは、20%を超える確率で顧客100002のセグメントへの割当てを判断した場合に(この顧客の場合はセグメント9のみ)、最も重要な5つの特徴を戻します。
SELECT S.cluster_id, probability prob, CLUSTER_DETAILS(em_sh_clus_sample, S.cluster_id, 5 using T.*) det FROM (SELECT v.*, CLUSTER_SET(em_sh_clus_sample, NULL, 0.2 USING *) pset FROM mining_data_apply_v v WHERE cust_id = 100002) T, TABLE(T.pset) S ORDER BY 2 desc;
出力内容は次のようになります。
CLUSTER_ID PROB DET
---------- ------- --------------------------------------------------------------------------------
9 1.0000 <Details algorithm="Expectation Maximization" cluster="9">
<Attribute name="YRS_RESIDENCE" actualValue="4" weight="1" rank="1"/>
<Attribute name="EDUCATION" actualValue="Bach." weight="0" rank="2"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight="0" rank="3"/>
<Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight="0" rank="4"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight="0" rank="5"/>
</Details>