研究議題:哪一些品類在哪些州賣的比較好?




【A】準備資料

A1.顧客的地理分布(比率)
# A tibble: 27 x 4
   customer_state     n    pc   cum
   <chr>          <int> <dbl> <dbl>
 1 SP             41746 42.0   42.0
 2 RJ             12852 12.9   54.9
 3 MG             11635 11.7   66.6
 4 RS              5466  5.50  72.1
 5 PR              5045  5.07  77.2
 6 SC              3637  3.66  80.8
 7 BA              3380  3.40  84.2
 8 DF              2140  2.15  86.4
 9 ES              2033  2.04  88.4
10 GO              2020  2.03  90.5
# ... with 17 more rows

超過80%(90%)的顧客都集中在前6(10)州

A3. Pull TPC$product_category_name_english into I$category via O
Joining, by = "product_category_name"
Joining, by = "product_id"


A4. Make a state*category Matrix


💡 「矩陣」與「熱圖」
■ 依兩類別變數做分類統計,就會產生矩陣
■ 矩陣中大部分的數值常常會集中在某幾行、某幾列裡面。
■ 通常我們會將矩陣依rowSums()colSums()的大小順序分別在兩個方向做排序


   rank  cum.pc
SP    1  38.296
RJ    2  51.721
MG    3  63.401
RS    4  68.926
PR    5  73.958
SC    6  77.786
BA    7  81.553
DF    8  83.790
GO    9  85.923
ES   10  87.962
PE   11  89.890
CE   12  91.559
PA   13  92.818
MT   14  93.977
MA   15  94.858
MS   16  95.724
PB   17  96.563
PI   18  97.207
RN   19  97.822
AL   20  98.417
SE   21  98.855
TO   22  99.222
RO   23  99.561
AM   24  99.724
AC   25  99.843
AP   26  99.943
RR   27 100.000
                                        rank   cum.pc
health_beauty                              1   9.3885
watches_gifts                              2  18.3767
bed_bath_table                             3  26.1116
sports_leisure                             4  33.4815
computers_accessories                      5  40.2838
furniture_decor                            6  45.7271
cool_stuff                                 7  50.4657
housewares                                 8  55.1817
auto                                       9  59.6028
garden_tools                              10  63.2223
toys                                      11  66.8321
baby                                      12  69.9034
perfumery                                 13  72.8805
telephony                                 14  75.2948
office_furniture                          15  77.3382
stationery                                16  79.0608
computers                                 17  80.7239
pet_shop                                  18  82.3225
musical_instruments                       19  83.7509
small_appliances                          20  85.1729
electronics                               21  86.3682
consoles_games                            22  87.5428
fashion_bags_accessories                  23  88.6827
construction_tools_construction           24  89.7618
luggage_accessories                       25  90.8093
home_appliances_2                         26  91.6545
home_construction                         27  92.2743
home_appliances                           28  92.8723
agro_industry_and_commerce                29  93.4133
furniture_living_room                     30  93.9274
fixed_telephony                           31  94.3718
home_confort                              32  94.8087
air_conditioning                          33  95.2191
audio                                     34  95.5972
small_appliances_home_oven_and_coffee     35  95.9511
books_general_interest                    36  96.3006
kitchen_dining_laundry_garden_furniture   37  96.6462
construction_tools_lights                 38  96.9526
construction_tools_safety                 39  97.2550
industry_commerce_and_business            40  97.5509
food                                      41  97.7701
market_place                              42  97.9818
costruction_tools_garden                  43  98.1736
art                                       44  98.3542
fashion_shoes                             45  98.5299
drinks                                    46  98.6972
signaling_and_security                    47  98.8576
furniture_bedroom                         48  99.0070
books_technical                           49  99.1495
costruction_tools_tools                   50  99.2681
food_drink                                51  99.3813
fashion_male_clothing                     52  99.4619
fashion_underwear_beach                   53  99.5330
christmas_supplies                        54  99.5987
tablets_printing_image                    55  99.6548
cine_photo                                56  99.7066
music                                     57  99.7516
dvds_blu_ray                              58  99.7963
books_imported                            59  99.8309
party_supplies                            60  99.8644
furniture_mattress_and_upholstery         61  99.8970
fashio_female_clothing                    62  99.9179
fashion_sport                             63  99.9337
la_cuisine                                64  99.9490
arts_and_craftmanship                     65  99.9625
diapers_and_hygiene                       66  99.9742
flowers                                   67  99.9825
home_comfort_2                            68  99.9882
cds_dvds_musicals                         69  99.9936
fashion_childrens_clothes                 70  99.9979
security_and_services                     71 100.0000

🌞 我們只要選取最前面的15行和32列就可以覆蓋95%的銷售金額



【B】保持原有行列次序

由於我們事先已經將X矩陣的行列次序依降冪排列,我們可以以原有的次序畫出熱圖

但是這樣做的話,我們只會看到顧客最多的哪一州(SP)和賣得最好的幾個品類。

💡 學習重點:
  ■ 極端值會嚴重干擾視覺化的效果
  ■ 對數轉換:在不破壞次序的前題下,有效降低極端值的影響



【B】對數轉換 Log Transformation

      [,1]   [,2]
[1,]  0.00 478285
[2,] 49.99 478285

因為log(0) = -Inf,所以取對數之前我們常需要先加進去一個數值,通常我們會選用矩陣中最小的數字



【C】行列集群 Clustering over Rows and Columns

熱圖工具通常都會對矩陣的行與列分別作集群分析,在這個例子裡面,「購買行為相似的州」和「顧客地理分布相似的產品」會被檢在一起,以方便我們做觀察。



【D】橫向(同州、跨品類)正規化,比較品類在各「州內」的「市佔率」

由於各州的顧客數量相差很多,州間並沒有相互比較的基礎,在熱圖裡面我們也很難觀察前三大州以外的地區;為了克服這個問題,我們可以用正規化(Normalization)的方式讓每一州的總營收都等於100,也就是說,我們讓矩陣之中的每一格都代表某一品類佔某一州總購買金額的百分比,這樣我們才能夠比較各州在品類購買比重上的異同。 (這裡的「市佔率」是指每100元的消費之中購買某品類的金額,它其實應該被稱為「口袋佔有率」)

  • 上圖中每一格的顏色代表某一品類佔某一州總購買金額的比例(越紅越大),我們可以觀察到,雖然所有地區的消費都集中在最左邊的品類,各州對各品類的消費比例還是有些差異,所以我們可以根據這些差異對各州做分群。


【E】縱向(同品類、跨州)正規化,比較品類在各「州間」的「銷售分佈」

當然我們也可以做縱向正規化,藉以比較品類在各州間的銷售分佈;

但由於SPRJ太突出,直接這樣做很難看出比較效果;

💡 學習重點:
  ■ 注意一下縱向正規化的做法,它需要做兩次轉置 t()
  ■ 通常熱圖的集群分析只會做在正規化的方向(因為通常另一個方向的相似性沒有實質意義)
  ■ 但正規化似乎並沒有解決顏色只會集中在少數幾個品類或少數幾州的問題



【F】極端值遮罩

矩陣數值的分布很不均勻的時候,有時候可以加上一些遮罩把極端值遮去,可能會比較容易找到結構。



【G】雙向正規化 (卡方檢定)

前面說過,單方向的正規化有一個缺點,我們對一個方向(州)做正規化之後,另外一個方向(品類)的數值就失去了比較的基礎;如果我們想要在兩個方向上同時做分類和比較,我們可以把矩陣的「標準化殘差(standardized residuals)」畫成熱圖

標準化殘差 (standardized residuals):將實際值與期望值之間的差「標準化」
\[r_{i,j} = \frac{x_{i,j} - E_{i.j}}{\sqrt{E_{i,j}}}\]

表格期望值:
\(E_{i,j} = P_i \times P_j \times R, \quad P_i = R_i/R, \quad P_j = R_j/R\)

  • \(x_{i,j}\): Actual Revenue of Category-\(j\) in State-\(i\)
  • \(E_{i,j}\): Expected Revenue of Category-\(j\) in State-\(i\)
  • \(P_i\): Marginal Probability of State-\(i\)
  • \(P_j\): Marginal Probability of Category-\(j\)
  • \(R_i\): Total Expenditure in State-\(i\)
  • \(R_j\): Total Revenue of Category-\(j\)
  • \(R\): Grant Total Revenue

💡 『標準化殘差熱圖』的判讀:
水平方向某一州 vs. 全國 對各品類的消費金額分佈 (占比)
  □ 紅(綠)色代表該品類在該州的消費金額占比顯著高(低)於該品類在全國的消費金額占比
  □ 與全國對各品類的銷售金額分佈相比 …
      § 在ESfixed_teleph(small_appli)的銷售金額占比較高(低)
      § .. (請你自己做一些練習)
      § ..
垂直方向某一品類 vs. 所有品類 在各州間的銷售金額分佈 (占比)
  □ 紅(綠)色代表該州對該品類在的購買金額占比顯著高(低)於全國對該品類的購買金額占比
  □ 與所有品類在各州間的總銷售金額分佈相比 …
      § fixed_telephES&RJ(PR,MG,SP)的銷售金額占比較高(低)
      § ..
      § ..
簡單說:綜合考慮各品類間與各州間的銷售金額(邊際)分佈之後
  □ 在ESfixed_teleph(small_appli)賣得相對比較好(差)
  □ fixed_telephES&RJ(PR,MG,SP)賣得相對比較好(差)
  □ ..
  □ ..


💡 「矩陣」與「熱圖」
■ 依兩類別變數做分類統計,就會產生矩陣
■ 熱圖是矩陣資料的視覺化工具
■ 熱圖不只是用顏色代表數值而已
■ 它可以對矩陣的欄與列做集群分析,分別將兩個類別變數之中相似的分類撿在一起
■ 對數轉換可以降低極端(離群))值的影響,讓熱圖的顏色更有區辨效果
■ 為了建立比較基礎加強視覺效果,有時我們需要先對矩陣的欄、列或整個矩陣做轉化


💡 「比較基礎」和「數值散佈」
■ 分析其實就是做比較,而比較需要有:「比較基礎」和「可比較性」
■ 資料轉換通常是為了解決「比較基礎」和「數值散佈」這兩個問題
■ 當要比較(或視覺化)的數值之間大小相距很大的時候,可以考慮:
    § 將數值轉化為比率
    § 做對數轉換 (log10())
    § 設定數值範圍 (pmin(),pmax())
    § 標準化 (standardization)
    § 正規化 (normalization)
    § 標準化殘差矩陣 (standardization)


💡 「正規化」和「標準化」
基準化有兩種作法:
  ■ 正規化(Normalization)比較重視比例,它的值是單向的(從0到1);
  ■ 標準化(Standardization)比較重視變異,它的值是雙向的,以0為基準、以標準差為單位


🗿 討論問題:
  ■ 基準化的目的是什麼?
  ■ 正規化和常態化的目的有什麼異同?