啤酒和尿布的購買有關系嗎?答案是,跟尿布一起購買最多的商品就是啤酒。據沃爾瑪的分析調查,美國的太太們常叮囑她們的丈夫下班后為小孩買尿布,而丈夫們在買尿布后又隨手帶回了他們喜歡的啤酒。對於隱藏在啤酒和尿布這類表面上風馬牛不相及的商品背后的關聯,如果不通過數據挖掘的技術,是沒有辦法靠拍腦袋的辦法想出來的。這就是關聯規則挖掘中最經典的例子。
什么是關聯規則挖掘技術?
關聯規則挖掘的根本目的是尋找商品銷售記錄中的相關性,從而更好地指導銷售策略的制定。一個典型的規則是:“43%購買了雀巢速溶咖啡的顧客都會購買雀巢咖啡伴侶”。基於這個規則,在實體超市中,應當把這兩種產品放到相近的地方,而在網上超市中,如果顧客購買了雀巢速溶咖啡卻沒有購買咖啡伴侶,則可以在關聯商品欄目中添加相應的推薦。現在很多企業已經認識到詳細的原始購買記錄的重要性,並且建立了規范的數據倉庫,這些都為關聯規則挖掘技術的應用奠定了良好的基礎。
商品之間關聯規則可以分為空間關聯和時間關聯兩種,時間關聯又可以分為周期關系和順序關聯兩種。在一般研究中提到的關聯規則,其實僅僅是空間關聯,也就是在同一個時間(同一次購買)里,對消費者經常一起購買的商品進行分析,這也是所謂“購物籃分析”的主要支撐技術。
空間關聯挖掘技術
最常見的空間關聯規則挖掘技術,是所謂的“支持-置信”分析。以消費者在超市購買商品為例,如果把每一個消費者的一次購買看作一個事件,考慮從商品X到商品Y的關聯規則,支持度是指在所有事件中同時購買商品X和商品Y的比例,置信度則是在所有購買了商品X的事件中也購買商品Y的比例 。如果支持度和置信度都超過了相應的閾值,則從X到Y的規則被認為是有效的。
“支持-置信”分析存在很多缺陷,首先體現在支持度方面的缺陷。
譬如說需要人為設定支持度閾值如果閾值太低,則會出現很多可信度很低的關聯規則,僅僅可能來自於個別消費者偶然的行為,如果閾值太高,很多冷門商品之間的關聯規則無法被挖掘出來。一種可能的替代方法是直接分析商品之間銷售記錄的相似度,認為與商品X關聯最強的商品就是和它相似性最大的商品。這時候需要注意兩點,首先,一般的相似度指標都是對稱的 ,也就是說X和Y的相似性與Y和X的相似性相同,但是此處要選擇不對稱的定義方式。譬如說商品X賣了10000件,商品Y賣了5件,其中X,Y共同賣了5次。那么給一個購買了X的消費者推薦Y不一定合適,因為只有千分之零點五的購買概率,而給一個購買了Y的消費者推薦X就比較靠譜,因為看起來似乎買了Y的消費者都會買X。這就是為什么要選擇不對稱的相似度指標的原因。其次,因為放棄了支持度閾值,會造成一個銷量很低的產品因為隨機波動的原因出現非常高的關聯,這個時候往往要通過對銷量低的商品相似度進行懲罰,懲罰的力度可以設定為商品銷售量(或者包含該商品的事件數目)的方根倒數[8]。舉例而言,在為商品X選擇關聯商品的時候,如果商品Y銷售了49次,則商品Y對應的相似度應該減去1/7。商品賣得越好,可信度越高,懲罰也越少。
另外一個缺陷體現在置信度上。考慮一個銷售量很大的商品X(設銷售事件總數為100萬,包含該商品的銷售事件數為5萬)和一個銷售量很小的商品Y(包含該商品的銷售事件數為200),假設商品X和Y之間的銷售完全是獨立的,那么在Y看來,商品X的置信度為5萬/100萬=0.05;而在X看來,和Y關聯置信度是200/10萬=0.002。也就是說,在一對產品的銷售記錄超過了支持度閾值的條件下,系統總是傾向於推薦銷售量大的產品。我們曾將在某家網上超市的關聯推薦欄中發現,當該超市超低價促銷蘇菲衛生巾的時候,不管購買軍刀、箱包、零食,都會推薦蘇菲衛生巾;而當該超市力推金龍魚油的時候,則經常在推薦欄中連續出現多款金龍魚油,盡管你只是買了50支一次性紙杯。這些推薦會造成廣告信息冗余(首頁上已經用更大幅的廣告低價促銷了),並且用戶體驗較差(用戶理解不了這些關聯,會認為這不是來源於一種數據挖掘技術,而是一種打着數據挖掘幌子的變相廣告投放)。從信息熵或者資源分配的角度出發,在設計相似度指標的時候,適度向少量較少的長尾商品傾斜,有望大幅度提高關聯規則挖掘的價值。
時間關聯挖掘技術
相對於空間關聯而言,時間關聯的研究和應用都比較少,但事實上其應用價值並不一定比空間關聯遜色!其實,順序關聯和周期關聯兩種模式都非常容易理解。順序關聯是指購買了商品X的消費者,傾向於在一個特定的時間間隔后購買商品Y。更嚴格地說,如果商品X和商品Y之間存在很強的時間關聯性,則所有購買過X和Y的消費者購買X和Y的間隔時間的分布具有一個比較窄而高的峰值。要特別注意的是,剛才我們講的空間關聯,只是順序時間關聯的一個特例,對應的峰值在間隔時間為0處。舉個簡單的例子,如果一位消費者今天購買了一罐針對半歲幼兒的奶粉,那么大約半年后,他會購買針對一歲幼兒的奶粉,也就是說半歲奶粉和一歲奶粉這兩個商品被同一個消費者購買的時間間隔分布在半年左右會有一個峰。
周期關聯和空間關聯與順序時間關聯不同,不是兩個商品之間的關聯,而是同一個商品在被同一個消費者購買時在購買時間上的周期性。舉個例子來說,如果一個家庭,總是在同一個超市購買醬油,而每瓶500毫升的醬油大約使用25天,那么該商品針對此消費者的銷售時間間隔總是在25天左右。如果把所有購買過這種醬油至少兩次的消費者的購買間隔時間放在一起,相應的時間間隔分布在25天左右會存在峰值。這里要注意的是,有的時候消費者會購買多件商品,所以需要歸一化。如果某消費者今天購買了3瓶醬油,下次購買醬油的時間是在60天后,則應該認為單位商品對應的間隔是20天。由於不同消費者消耗同一件商品的速率不同(醬油可以是一個人用,一個家庭用,甚至一個餐館用),所以噪音很大。另外,有些用戶或許會在兩次購買某商品X的中間,在另外一個地方購買過X,造成周期變長的假想。周期關聯挖掘雖然看起來很直觀,事實上還沒有比較成熟的技術,一般而言都是通過數據分析,先判斷哪些商品可能存在銷售上的周期性,然后需要人工幫助一起進行判斷。
時間關聯挖掘中要注意的一個特別重要的問題,就是選擇合適的數據粒度!這里要特別小心一個誤區,就是並非數據分辨率越高,關聯挖掘效果就越好。舉個例子來說,一般消費者對於紙巾的品牌依賴度比較小,在超市里面可能隨意選取或者購買當時的打折品。如果在單個商品的粒度上,噪音非常大(消費者很可能會在兩次購買同一款紙巾之間購買其他紙巾),往往無法挖掘有效關聯;但是如果在類目的粒度上(例如抽紙類),雖然消費者更換了品牌,但是單位數量抽紙消耗的時間往往能夠比較清晰的反映出來。事實上,我們只需要知道消費者快要用完抽紙,在這個時候就可以通過電子郵件促銷的方式通知他購買,至於具體推薦哪種品牌的抽紙,反而不那么重要可以是當期促銷品,可以是用戶以前購買最多的,可以是新品推廣,也可以是用戶上次購買的款式。針對數據比較稀疏,噪音比較大的環境,選擇較大粒度進行分析,往往會得到更好的效果。當然,粒度的選擇本身也是很困難,不同類商品的最佳粒度可能很不一樣,有的可以到單品,有的到品牌,有的只能到類目。
時間關聯挖掘能夠從數據交叉融合中得到更大的益處。跨網站、跨行為、跨線上線下的數據交叉融合方式,能夠給個性化算法帶來巨大利益。考慮兩個購物網站A和B,如果要進行A與B之間商品的空間關聯挖掘,就必須要分析幾乎同一時間在A站和B站進行過消費的用戶。遺憾的是,這樣的用戶非常少,即便是針對較相關的垂直電子商務網站,例如麥包包和名鞋庫,訪問過一個電商后一個月內訪問過另外一個的用戶比例一般都不到1%,都有購買行為的就更加微乎其微了。這種情況下進行空間關聯挖掘的效果是有限的 。時間關聯挖掘則完全不需要在A和B站同時有訪問或者購買行為的用戶。只要存在一些在兩個網站都出現的單品或者類目,就可以把兩處的消費者行為直接合並起來處理。
百分點首席科學家 周濤