便å©ååºãè¶ å¸ãé販åºç«åºä¾çRFMä¸æ¨£åï¼
èªå¾å¯«å®ãåä¾ç¨Python實ä½è¡é·RFM modelï¼å¯ä»¥é£éº¼ç°¡å®ï¼-ãéPythonç¨å¼ç¢¼ããéç¯æç« å¾ï¼æä¸å°æååæï¼ãæ以RFMåå²çä¾ææ¯ä»éº¼ï¼ãï¼ä»¥åæ總æ¯åçãè¦çç¢æ¥ãããä½ æ該æ¯æäºè§£ããã大æ¦æä¸ååéããå¾ä¾ææ³æ³ï¼ä»¥è³æç§å¸çè§åº¦ï¼æ±ºçå¿ é ææææï¼ä¸è½å ¨é ç´è¦ºå¤æ·ï¼å æ¤æ¬ç¯æç« ï¼å°ä»¥ç§å¸çè§åº¦ï¼å訴æ¨ãæ麼åå²RFMæ¯è¼å¥½ãã
åå²RFMè³æä¹æ¯ä¸éèè¡ï¼çµå°ä¸å¯è½æ¯å¹³åçåå²ï¼å çºæ¯åä¸åçç¢æ¥ï¼æå°æç顧客購買ééæ¯ä¸åçï¼çè³åä¸ç¾¤é¡§å®¢ãç±æ¼æ¯å顧客æèªå·±ç購買æé軸ï¼å¦ä½ç²¾æºçæ¾å°æ¯ä¸é¡é¡§å®¢ï¼è³¼è²·æéçå水嶺ï¼æ¯æåä»å¤©è¦è§£æçè°é¡ã
Pythonï¼ ãåä¾ç¨Python實ä½è¡é·RFM modelï¼å¯ä»¥é£éº¼ç°¡å®ï¼-ãéPythonç¨å¼ç¢¼ãã
å¨é²è¡åå²åï¼å¿ é å äºè§£ï¼æ¨çååºæä»éº¼ç¹æ§ï¼å°±ç®æ¯é¶å®æ¥ä¹å¤§ä¸åã以ä¸åä¸çºä¾ï¼è«å便å©ååºãè¶ å¸ãé販åºæä»éº¼ä¸åï¼ç¨è³£çååä¾ååï¼è¯å®å¾é£ååãèæ¨ä¹å¾å¸¸çå°æéé販åºçæéï¼éæå ©ä¸é便å©è¶ åï¼å¨å°åæ´å¸¸è¦ï¼ï¼å¦æä»åæ²æä¸åï¼æ©å°±äºç¸ç«¶çèåéäºã
è¦å¾ã解決æ¶è²»è éæ±ãçè§åº¦åºç¼ï¼
- 便å©ååºï¼è§£æ±ºå³ææéã
- è¶ å¸ï¼è§£æ±ºä¸æ¥æéã
- é販åºï¼è§£æ±ºä¸é±æéã
ç±æ¤å¯ç¥ï¼æ¬è³ªä¸ä¸ç¨®é¶å®ååºçé¡§å®¢è³¼è²·é »çå°±æå¾å¤§çå·®å¥ï¼å æ¤è¥é½ä»¥åºå®çåå²æ¨¡å¼ï¼ææé軸ä¾ç¹ªè£½RFMï¼æ¯é常ä¸åççãå°±å¾çµ±è¨å¸çè§åº¦ä¾æ±ºå®åå²å§ï¼
åå²çåçï¼å ¶å¯¦æ¯å©ç¨ç°¡å®ççµ±è¨åæ¸ï¼ä½çºåå²çä¾æãæåæè¨ç®åºæ¯å顧客æ¯æ¬¡è³¼è²·æçééï¼æéäºééçæéåçµ±è¨åæï¼å°ç®åºçç¾åä½è·ä¾ä½çºåå²çä¾æã å¦ä¸åæ示ï¼åè¨è¦å°RFMè³æååæ4份ï¼é£å°±ä¾ç §æ¶è²»è ç購買éé天æ¸ï¼æ¾å°25ç¾åä½ã50ç¾åä½ã75ç¾åä½ï¼ä½çºåå²çæ¨æºãçºä½è¦ä»¥æ¤ä¾ååå¢ï¼å çºé符åRFMçè¨è¨åçï¼ä¾ç §æ¶è²»è çè³¼è²·é »çä¾è§æ¸¬æ¶å ¥ï¼åè½é«ç¾RFMç¡æ³è§æ¸¬å°çï¼æµå¤±å®¢åé¡ï¼å¯è½è©²é¡§å®¢å¾ä¹ 以åæ¯å¸¸è²´å®¢ï¼ä½å®å ¶å¯¦å®ç¾å¨å·²ç¶æäºå¥éåºæ¶è²»ï¼å¨åæä¸è©²é¡§å®¢æè®æ常貴客ã
é¦å å©ç¨pivot_tableæ¹æ³ï¼è¨ç®åºæ¯åæ¶è²»è ï¼æ¯æ¬¡æ¶è²»æï¼åå¥è³¼è²·å¹¾æ¨£ååãå¦ä¸æ¹é¢ï¼ä¹å¯ä»¥é 便統æ´è©²åæ¶è²»è ï¼å°åºä¾æ¶è²»å¹¾æ¬¡ã
orders['values'] = 1
purchase_list = orders.pivot_table(
index=['clientId','gender','orderdate'], #åé¡æ¢ä»¶
columns='product', # ç®çæ¬ä½
aggfunc=sum, # è¨ç®æ¹å¼ï¼max, min, mean, sum, len
values='values' #æ ¹ææ¬ä½
).fillna(0).reset_index()
å çºè³æçæéæ¯2017å¹´ï¼å æ¤æå以è³ææè¿çé£å¤©ï¼2017/4/17ï¼ä½çºåæçåºæºæ¥æï¼ä»¥å°±æ¯ä»¥é£å¤©ä¾é²è¡ç¸æ¸ï¼ç®åºRFMä¸æéè¦çrecencyã
#è¨å®ä»å¤©çæ¥æçºæè¿ä¸ä½é¡§å®¢è³¼è²·çæ¥æï¼å¾é£å¤©ä¾çéå¾çé·å®çæ³
theToday = datetime.datetime.strptime(orders['orderdate'].max(), â%Y-%m-%dâ)# å°è³¼è²·æ¸
å®è³æä¸'orderdate'çæ¬ä½ï¼å
¨é¨è½æædatetimeæ ¼å¼
purchase_list['orderdate'] = pd.to_datetime(purchase_list['orderdate'])# è¨ç®æ¶è²»è
è³ä»å次購買èä¸æ¬¡è³¼è²·ç¢åçæéå·®'
purchase_list['recency'] =( theToday â purchase_list['orderdate'] ).astype(str)# å°'recency'æ¬ä½ä¸çdayså»é¤
purchase_list['recency'] = purchase_list['recency'].str.replace('days.*', #æ³å代çæ±è¥¿
'', #å代æçæ±è¥¿
regex = True)
å°'recency'æ¬ä½å
¨é¨è½ææint
purchase_list['recency'] = purchase_list['recency'].astype(int)
æå¾ç¨pandaså¥ä»¶æ¹æ³groupbyï¼å ¶ä¸çdiff()æ¹æ³ï¼å®è½å¹«æåè¨ç®æ¯çè³æçæ¸å¼ééã
purchase_list['interval'] = purchase_list.groupby(
âclientIdâ, #åé¡æ¢ä»¶
as_index = True # åé¡æ¢ä»¶æ¯å¦è¦å代Index
)['orderdate'].diff()purchase_list.dropna(inplace = True)#åªé¤ç¬¬ä¸æ¬¡ä¾æ¬åºçè³æ
purchase_list['interval'] = purchase_list['interval'].astype(str) # å°æéè³æè½æå串
purchase_list['interval'] = purchase_list['interval'].str.replace('days.*', '').astype(int) #å°æ¬ä½ä¸çdayså»é¤
å°é裡æéçè³æé½å®æäºï¼æ¥ä¸ä¾å°±æ¯å©ç¨çµ±è¨åæï¼ççæ¶è²»è éé天æ¸ï¼intervalï¼çè³æå·®ç°å¦ä½ãå¯ä»¥å©ç¨pandaså¥ä»¶çdescribe()æ¹æ³ï¼ååºintervalæ¬ä½ç總æ¸ï¼countï¼ãå¹³åï¼meanï¼ãæ¨æºå·®ï¼stdï¼ãæå°å¼ï¼minï¼ã25ç¾åä½ï¼25%ï¼ã50ç¾åä½ï¼50%ï¼ã75ç¾åä½ï¼75%ï¼ãæ大å¼ï¼maxï¼ã çµæå¯ä»¥ç¼ç¾ï¼ééå¹³ååªæ19.45天ï¼ä½ééæä¹ ç顧客çè³å°é89天ï¼ç±æ¤è³æ繪製ç¨å7çåå½¢ï¼å¯ä»¥ç¼ç¾æ´åè³æ大çé常極端ï¼ä½å ¶å¯¦éäºè³æå¨RFMä¸æ該å¯ä»¥å ¨é¨å¯éæä¸ååå¡æ¶è²»è ï¼å çºéäºæ¶è²»è æ¸éä¸å¤ã ç²åç¾åä½æ¸å¿ é 使ç¨quantileæ¹æ³ï¼å¨åæ¸ä¸ä»¥é£åè¼¸å ¥æ³è¦çç¾åä½å³å¯ãä¾å¦è¼¸å ¥[0.25, 0.5, 0.75]ï¼å°±æå¾å°çµæ6ã14ã27ãå æ¤è¥è¦å°RFMåå²æåçåï¼å°±è½ä»¥ä»¥ä¸ä¸åæ¸åååå²ã
purchase_list['interval'].quantile([0.25, 0.5, 0.75])
æå以å¾çRFMåå²ï¼é½æ¯åæ6X6ï¼å æ¤é裡å°å ¶ååæ6份ï¼å çºååæ6份æç¡æ³æ´é¤ï¼å æ¤å¤§æ¦ä»¥16ç¾åä½çºç´è·ãæå¾å¾çµæ4ã9ã14ã21ã35ã
purchase_list['interval'].quantile([0.16, 0.32, 0.5, 0.66, 0.82])
æ¸æå¯è¼ä¼æ¥ï¼äº¦è½è¦ä¼æ¥
æä¾æçåå²å¾çµæï¼èåè åæ¯è¼ãå¯ä»¥ç¼ç¾ï¼ææ顯çå·®è·æ¯é販客çé¨ä»½ãå çºé販客æ¯æé£åéåºä¾ç客群ï¼å çºè¦åæ符åé«frequencyèrecencyçæ¢ä»¶ï¼è¥æä¸éçæ¢ä»¶è¨å®ä¸ä½³ï¼é½æå°è´é販客ææ空æ´ï¼å¦ä¸åå·¦åé¨ï¼ã
å¦ææ¨æ¯èéæé«é主管ï¼å¨å±¬ä¸åæ¨å ±åRFMåæçµææï¼å¿ é åä»åå²çä¾æãç¶ç±éé 調æ´å¾ï¼æç¼ç¾éééå¸çéè²©å®¢å ¶å¯¦ä¹ä¸å°ï¼å æ¤æ´ååå²çå°è®åï¼æå¼å°æ´å決çç風åã
作者:楊超霆 行銷搬進大程式 創辦人