行銷定價新型態:即時動態定價策略與實做(附實現程式碼)
動態定價顧名思義是一種採取變動價格的定價方式。在電子商務的世界裡,透過資料科學的分析與應用,產品價格變化的時間間距,可以小到以分秒來計。根據報導,亞馬遜於2013年,平均每天有超過250萬次的動態價格調整。
在傳統定價中,價格通常受到供給與需求的影響。而動態定價,則是透過系統即時分析、設定,產生價格的自動化過程。在實體商店裡,想要改變成千上萬件產品的價格並不容易,因為它必須透過人工將架上的產品重新換置。然而,在網路上卻相對簡單,因為網路商店可透過系統的設定,依據消費者近期的購買行為、銷售量、庫存量、甚至網路上最新的討論議題…等,作為產品定價的判斷因素,即時更改網路上的產品定價。
因此,就成本面與時效面來說,動態訂價提供網路商店更多且更即時的行銷操作空間,同時也更有利於庫存管理。例如:當新聞報導空氣品質嚴重不佳時,網路商店可透過資料分析,即時發展出多款空氣清新機商品的限時價格促銷活動,如不只降價,還買大送小。而當時間一到,系統馬上會將多項商品恢復原價。
另一種常用動態定價的情況,則就供給狀況的變化而有所轉換。例如:小至海鮮、酒品,大至預售屋,時常就以「時價」的方式來反應供給所造成的情形。再舉一個大家耳熟能詳的範例,Airbnb的經營模式正是因為擁有「給力(利)」的動態定價,才讓他們的房屋租借者不虞匱乏(因為受動態定價的影響,所以依照淡旺季快速調整營收策略,想辦法多賺點錢),這樣就能提供消費者更好的服務。
以下,簡單說明動態定價能為企業帶來的好處:
- 增加企業利潤率。
- 提高產品轉換率。
- 提升庫存管理效益。
- 刺激離峰尖峰時段的銷售。
- 提升對競爭者價格變動的反應。
至於如何進行動態定價,常見的動態定價方法如下:
- 時間動態定價:根據假日、淡旺季、離峰尖峰時間…等,進行動態定價。
- 地理動態定價:根據不同區域的狀態,進行動態定價。
- 競爭者動態定價:根據競爭者價格即時調整售價,如:限時最低價、產品組合定價…等。
- 消費者動態定價:對猶豫不決的顧客提供價格誘因促使購買。
而如今面臨電商及社群經營的型態考量下,我們更要參考淺談資料格式 — 結構化與非結構化資料文章的概念,尋常結構化資料蒐集模式,要儘快結合「非結構化」的資料,如:文字、圖片,迅速掌握消費者對於商品的看法,深入消費者的想法,以求更精準化的行銷動態定價!
但是… 身為一個平台經營商,不可能時刻盯在電腦前面,觀察消費者的需求,動態調整定價….,更遑論一秒可能產生千乃至萬評論資料的電商平台。
所以,這時候我們就要應用到行銷資料科學中的「機器學習」功能,來協助我們進行自動化的動態定價。
動態定價 — Python實戰去!
講解過整個動態定價的概念後,接著,我們要深入行銷資料科學的「資料科學」領域,結合「結構化」與「非結構化」資料結構,將爬蟲下來的實際資料,以Python 3 進行機器學習實戰!
我們即將使用 Mercari 電商平台上的爬蟲資料進行分析,並以「顧客行為」的角度切入動態定價。讀者可以想像一下,當有一賣家急著出清自家球鞋,並已將商品基本資訊,如:
- 商品名稱 — 輕量避震籃球鞋
- 商品狀態 — 7成新
- 商品敘述 — 高級名牌球鞋!限時優惠!
- 商品分類 — 球鞋
- 商品品牌 — 好棒棒牌
- 運費狀況 — 賣家付
…
等基本資料完成後,接著,最困難的就來了,賣家該如何根據現有狀況定價? 如果這時突然跳出一系統訊息:「根據行情,本球鞋建議售價 1000元! 可儘早賣出!」
這時賣家就可能受到系統訊息的影響,想說:「反正我要趕快出清,我就用系統建議架個賣掉好了。」也就是賣家的這個想法,我們已經不知不覺觸發了電商平台背後的「動態定價的機制」。
讀者可以花幾秒想想,這個簡單的機制背後到底隱含了什麼樣的目的?
最主要目的:
- 預測定價,再提供電商平台的賣家商品價錢建議,降低賣家定價猶豫的時間,提昇上架的速率。
- 電商平台化被動為主動,增加操縱賣家「動態售價」的可能性。
- 讓電商平台迅速掌握不同品項的動態定價,便可根據時間週期調整商品供需。
- 利用機器學習模型與損失函數之搭配,來誘導賣家訂出「不割喉式競爭」的價格。
從此開始,難度會相較於動態定價概念來說高上許多!
平台簡介:
Mercari為日本社群電商銷售最大的平台,提供賣家在上面銷售自家產品(有點像是掏寶)。
方法:
主要以改良過的機器學習模型 Ridge regression,製作模型,進行預測。
資料:
Mercari 的公開資料,共約148萬筆文字資料,可在本檔案連結下載數據。
數值變數
price: 每一物品的下標價格,也是廠商要可以對賣家做價錢自動建議的變數
類別變數
- shipping: 為一二元變數,1代表是賣家付錢,0代表買家付錢
- item_condition_id: 代表商品狀況
- name: 商品名稱
- brand_name: 商品品牌
- category_name: 商品分類
- item_description: 賣家對商品的敘述
載入套件
將重要套件載入python環境。
讀取資料集並檢視價格
檢視價格的目的在於
- 挑選損失函數
- 了解價格分佈
由價格敘述性統計中,我們發現價格迥異極大,大(max)則到2009美元,平均(mean)27美元,小(min)則0元,且可發現價格分佈呈現右偏分佈,必須使用log轉換,方可將價格的右偏分佈儘量導正到常態分佈,讓訓練上比較快收斂。
損失函數
因為價錢高低之間的不同,如果要做預測,最好使用RMSLE(Root Mean Square Logarithmic Error)的方式當作損失函數,主要原因是用來調節 「預測值」低於「真實值」的損失,讓預測出來的結果儘量不會過低於真實值,以免造成電商平台割喉式競爭,得不償失。
舉例來說:
我的預測值 = 售價6元;真實值 = 售價10元,他的RMSLE = 0.4520
我的預測值 = 售價14元;真實值 = 售價10元,他的RMSLE = 0.3102
明顯發現當我的預測值低於真實值時,就會受到損失函數的懲罰(penalty),那透過機器學習最常使用的梯度下降法(gradient descent)來說,便會優先將售價6元的數值調高,想辦法降低RMSLE的損失。那以「商業應用」來說,就代表著提供賣家儘量不低於市場行情的建議售價,也就避免了降價求售,而電商平台賺不到抽成費用的窘境。
# 預測值 = 6;真實值 = 10 的 RMSLE 計算式
np.sqrt(np.mean(np.power(np.log1p(6) - np.log1p(10), 2)))= 0.4055# 預測值 = 14;真實值 = 10 的 RMSLE 計算式
np.sqrt(np.mean(np.power(np.log1p(14) - np.log1p(10), 2))) = 0.3102
建模
檢視完價格變數及訂定損失函數後,來建模吧, 從現在開始,我們便要針對建模逐步做詳細說明,讓我們趕緊來體驗吧!
定義基本品牌數值
定義模型function參數
開始定義模型文字處理的函式與損失函數。並進行非結構化文字資料與結構化資料處理。
自然語言分析前處理
任何非結構化的資料都必須要轉換成模型訓練能使用的「結構化資料」。
在item_description的欄位中放的是商品的敘述,而商品的描述是非常長的,可比一篇短文,因此在自然語言處理中,我們時常利用TF-IDF法來找到關鍵字,作分析使用;TF-IDF法的全名是 Term Frequency -inverse Document Frequency,簡單來說,他是一種篩選關鍵字的方法,也是現在常使用的文字加權技術,主要有以下兩類:
- 字詞頻率(Term Frequency): 計算每文章字詞頻率,我們常用詞袋稱之(bag of words)。
- 逆文件頻率(Inverse Document Frequency): 一個單字出現在文章數目的逆向次數,也就是說,如果該字太常出現,就顯得不重要,例如:「你」、「我」、「他」、「了」、「吧」,這種不具有指標性的主詞或語氣詞,他得加權數值就會顯低上許多。會取log的原因在於隨著每個字詞的增加,其差異次數必是呈現遞減式遞增,如10-9與1000-999之差異,一個是0.1,一個卻是0.001的差距。
舉簡單例子來說,我們有10篇文章當作樣本
- 「鍾皓軒」這個字詞卻在同一篇文章中出現過100次,那「鍾皓軒」的TF-IDF就是100(TF) * log(100/10) = 230
- 「我」這個字詞在10篇文章中都有出現,且僅出現過10次,那「我」字詞的TF-IDF就是10(TF) * log(10/10) = 0
所以從此範例中清楚可見「鍾皓軒」相對於「我」來說,要重要許多!
最後將所有非結構化變數轉變成稀疏結構化矩陣,以便於模型分析,因為一般非結構化的變數如果要轉換成結構化資料,維度通常都會破千萬以上,且並不代表每一個欄位轉換後都有數值存在,所以才稱作「稀疏結構化矩陣」或直接稱作「稀疏矩陣」。
接下來就讓我們開始真正建模吧!
脊迴歸(Ridge regression)
使用本方法的原因在於,因為分析的變數極多,共有7萬多筆自變數,所以一般線性迴歸模型使用的最小平方法忌諱的共線性便容易產生,讓權重(Beta)變得非常不穩定,因此我們便加入L2正規化函式於損失函數後,讓Beta的變動縮小,以達到平衡。
使用脊迴歸訓練完畢後,我們發現其RMSLE = 0.4677,已經算是不錯的標準,接著讓我們來製作出真實值與預測值的比較圖表。
Bingo~! 根據以往資料訓練後的動態定價產生拉~
也就是說,當賣家輸入一串文字與相關結構化訊息後,預測的動態定價就會產生!
價格預測上仍有待更多的資料數目來加強準確度,至於RMSLE是否有發揮預測值比真實值低就會進行調節之作用(逞罰)? 結果是很明顯的:有!
「預測值(Pred_price)」的個數明顯高於「真實值(true_price)」的個數,這讓平台商推薦給賣家的價格上,不會一面倒造成「割喉式競爭」。
再看平均數值,發現「預測值」的價格比「真實值」的價格普遍來說低上3~6美元,代表預期值個數雖多,但並不會因此大幅度的調昇價格,降低消費者因貴不買之可能性。
由這個動態定價的實例來看,確實有機會
- 因為建議賣家售價,降低賣家定價猶豫的時間,提昇上架的可能性。
- 同時增加操縱賣家「動態售價」的可能性。
- 讓電商平台迅速掌握不同品項的動態定價,便可根據時間週期調整商品供需。
- 利用機器學習模型與損失函數之搭配,來誘導賣家訂出「不割喉式競爭」的價格。
敬請期待! 即時動態定價 — 集成模型
常言道:「三個臭皮匠,勝過一個諸葛亮」,我們在動態定價 — Python實戰去!僅提及最基本的Ridge regression,試想如果我同時串連好幾個模型進行預測會不會更準確呢? 這就是機器學習中集成模型(Ensemble model)的概念,在往後的貼文,我們會使用三個不同參數的模型製作集成模型,造就RMSLE降低3%-10%的功效,使結果更加準確!
想了解集成模型與營收之間的關係嗎? 歡迎繼續閱讀
即時動態定價「實做 2」 — 集成模型(附實現程式碼)
往後的貼文都會持續在行銷資料科學粉絲專頁上發表喔!
再請大家多多follow我們的粉絲專頁:行銷資料科學
Enjoy Marketing Data Science!
共同作者:
鍾皓軒(臺灣行銷研究有限公司 共同創辦人)
羅凱揚(台科大兼任助理教授)
楊超霆(臺灣行銷研究有限公司 資料科學研發工程師)