行銷定價新型態:即時動態定價策略與實做(附實現程式碼)

動態定價顧名思義是一種採取變動價格的定價方式。在電子商務的世界裡,透過資料科學的分析與應用,產品價格變化的時間間距,可以小到以分秒來計。根據報導,亞馬遜於2013年,平均每天有超過250萬次的動態價格調整。

在傳統定價中,價格通常受到供給與需求的影響。而動態定價,則是透過系統即時分析、設定,產生價格的自動化過程。在實體商店裡,想要改變成千上萬件產品的價格並不容易,因為它必須透過人工將架上的產品重新換置。然而,在網路上卻相對簡單,因為網路商店可透過系統的設定,依據消費者近期的購買行為、銷售量、庫存量、甚至網路上最新的討論議題…等,作為產品定價的判斷因素,即時更改網路上的產品定價。

因此,就成本面與時效面來說,動態訂價提供網路商店更多且更即時的行銷操作空間,同時也更有利於庫存管理。例如:當新聞報導空氣品質嚴重不佳時,網路商店可透過資料分析,即時發展出多款空氣清新機商品的限時價格促銷活動,如不只降價,還買大送小。而當時間一到,系統馬上會將多項商品恢復原價。

另一種常用動態定價的情況,則就供給狀況的變化而有所轉換。例如:小至海鮮、酒品,大至預售屋,時常就以「時價」的方式來反應供給所造成的情形。再舉一個大家耳熟能詳的範例,Airbnb的經營模式正是因為擁有「給力(利)」的動態定價,才讓他們的房屋租借者不虞匱乏(因為受動態定價的影響,所以依照淡旺季快速調整營收策略,想辦法多賺點錢),這樣就能提供消費者更好的服務。

以下,簡單說明動態定價能為企業帶來的好處

  1. 增加企業利潤率。
  2. 提高產品轉換率。
  3. 提升庫存管理效益。
  4. 刺激離峰尖峰時段的銷售。
  5. 提升對競爭者價格變動的反應。

至於如何進行動態定價,常見的動態定價方法如下:

  1. 時間動態定價:根據假日、淡旺季、離峰尖峰時間…等,進行動態定價。
  2. 地理動態定價:根據不同區域的狀態,進行動態定價。
  3. 競爭者動態定價:根據競爭者價格即時調整售價,如:限時最低價、產品組合定價…等。
  4. 消費者動態定價:對猶豫不決的顧客提供價格誘因促使購買。
而如今面臨電商及社群經營的型態考量下,我們更要參考淺談資料格式 — 結構化與非結構化資料文章的概念,尋常結構化資料蒐集模式,要儘快結合「非結構化」的資料,如:文字、圖片,迅速掌握消費者對於商品的看法,深入消費者的想法,以求更精準化的行銷動態定價!

但是… 身為一個平台經營商,不可能時刻盯在電腦前面,觀察消費者的需求,動態調整定價….,更遑論一秒可能產生千乃至萬評論資料的電商平台。

就算我們的眼睛有這小男孩這麼,也看不完所有非結構化的文字資料阿…

所以,這時候我們就要應用到行銷資料科學中的「機器學習」功能,來協助我們進行自動化的動態定價。

因為電商或社群網路的非結構化資料量非常龐大,必須尋求機器/電腦的幫助,這時候就會用到機器學習!(Credit:周晏汝)

動態定價 — Python實戰去!

講解過整個動態定價的概念後,接著,我們要深入行銷資料科學的「資料科學」領域,結合「結構化」與「非結構化」資料結構,將爬蟲下來的實際資料,以Python 3 進行機器學習實戰!

我們即將使用 Mercari 電商平台上的爬蟲資料進行分析,並以「顧客行為」的角度切入動態定價。讀者可以想像一下,當有一賣家急著出清自家球鞋,並已將商品基本資訊,如:

  1. 商品名稱 — 輕量避震籃球鞋
  2. 商品狀態 — 7成新
  3. 商品敘述 — 高級名牌球鞋!限時優惠!
  4. 商品分類 — 球鞋
  5. 商品品牌 — 好棒棒牌
  6. 運費狀況 — 賣家付

等基本資料完成後,接著,最困難的就來了,賣家該如何根據現有狀況定價? 如果這時突然跳出一系統訊息:「根據行情,本球鞋建議售價 1000元! 可儘早賣出!」

這時賣家就可能受到系統訊息的影響,想說:「反正我要趕快出清,我就用系統建議架個賣掉好了。」也就是賣家的這個想法,我們已經不知不覺觸發了電商平台背後的「動態定價的機制」。

讀者可以花幾秒想想,這個簡單的機制背後到底隱含了什麼樣的目的?

最主要目的:

  1. 預測定價,再提供電商平台的賣家商品價錢建議,降低賣家定價猶豫的時間,提昇上架的速率。
  2. 電商平台化被動為主動,增加操縱賣家「動態售價」的可能性。
  3. 讓電商平台迅速掌握不同品項的動態定價,便可根據時間週期調整商品供需。
  4. 利用機器學習模型損失函數之搭配,來誘導賣家訂出「不割喉式競爭」的價格。
從此開始,難度會相較於動態定價概念來說高上許多!
前方高能! 非戰鬥人員請迅速撤離!

平台簡介:

Mercari為日本社群電商銷售最大的平台,提供賣家在上面銷售自家產品(有點像是掏寶)。

方法:

主要以改良過的機器學習模型 Ridge regression,製作模型,進行預測。

資料:

Mercari 的公開資料,共約148萬筆文字資料,可在本檔案連結下載數據。

數值變數

price: 每一物品的下標價格,也是廠商要可以對賣家做價錢自動建議的變數

類別變數

  1. shipping: 為一二元變數,1代表是賣家付錢,0代表買家付錢
  2. item_condition_id: 代表商品狀況
  3. name: 商品名稱
  4. brand_name: 商品品牌
  5. category_name: 商品分類
  6. item_description: 賣家對商品的敘述

載入套件

將重要套件載入python環境。

讀取資料集並檢視價格

檢視價格的目的在於

  1. 挑選損失函數
  2. 了解價格分佈

由價格敘述性統計中,我們發現價格迥異極大,大(max)則到2009美元,平均(mean)27美元,小(min)則0元,且可發現價格分佈呈現右偏分佈,必須使用log轉換,方可將價格的右偏分佈儘量導正到常態分佈,讓訓練上比較快收斂。

經過log transformation後,可以發現呈現常態分佈,對於訓練收斂上會比較適合

損失函數

因為價錢高低之間的不同,如果要做預測,最好使用RMSLE(Root Mean Square Logarithmic Error)的方式當作損失函數,主要原因是用來調節 「預測值」低於「真實值」的損失,讓預測出來的結果儘量不會過低於真實值,以免造成電商平台割喉式競爭,得不償失。

RMSLE 美麗的數學式

舉例來說:

我的預測值 = 售價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,簡單來說,他是一種篩選關鍵字的方法,也是現在常使用的文字加權技術,主要有以下兩類:

  1. 字詞頻率(Term Frequency): 計算每文章字詞頻率,我們常用詞袋稱之(bag of words)。
  2. 逆文件頻率(Inverse Document Frequency): 一個單字出現在文章數目的逆向次數,也就是說,如果該字太常出現,就顯得不重要,例如:「你」、「我」、「他」、「了」、「吧」,這種不具有指標性的主詞或語氣詞,他得加權數值就會顯低上許多。會取log的原因在於隨著每個字詞的增加,其差異次數必是呈現遞減式遞增,如10-9與1000-999之差異,一個是0.1,一個卻是0.001的差距。

舉簡單例子來說,我們有10篇文章當作樣本

  1. 「鍾皓軒」這個字詞卻在同一篇文章中出現過100次,那「鍾皓軒」的TF-IDF就是100(TF) * log(100/10) = 230
  2. 「我」這個字詞在10篇文章中都有出現,且僅出現過10次,那「我」字詞的TF-IDF就是10(TF) * log(10/10) = 0

所以從此範例中清楚可見「鍾皓軒」相對於「我」來說,要重要許多!

最後將所有非結構化變數轉變成稀疏結構化矩陣,以便於模型分析,因為一般非結構化的變數如果要轉換成結構化資料,維度通常都會破千萬以上,且並不代表每一個欄位轉換後都有數值存在,所以才稱作「稀疏結構化矩陣」或直接稱作「稀疏矩陣」。

本次資料的稀疏矩陣的維度有4900萬維度

接下來就讓我們開始真正建模吧!

脊迴歸(Ridge regression)

使用本方法的原因在於,因為分析的變數極多,共有7萬多筆自變數,所以一般線性迴歸模型使用的最小平方法忌諱的共線性便容易產生,讓權重(Beta)變得非常不穩定,因此我們便加入L2正規化函式於損失函數後,讓Beta的變動縮小,以達到平衡。

將線性迴歸的加入L2調教,轉變成脊回歸,縮減共線性之可能性

使用脊迴歸訓練完畢後,我們發現其RMSLE = 0.4677,已經算是不錯的標準,接著讓我們來製作出真實值與預測值的比較圖表。

Bingo~! 根據以往資料訓練後的動態定價產生拉

也就是說,當賣家輸入一串文字與相關結構化訊息後,預測的動態定價就會產生!

列出前10筆價格的預測與真實價格

價格預測上仍有待更多的資料數目來加強準確度,至於RMSLE是否有發揮預測值比真實值低就會進行調節之作用(逞罰)? 結果是很明顯的:有!

「預測值(Pred_price)」的個數明顯高於「真實值(true_price)」的個數,這讓平台商推薦給賣家的價格上,不會一面倒造成「割喉式競爭」。

再看平均數值,發現「預測值」的價格比「真實值」的價格普遍來說低上3~6美元,代表預期值個數雖多,但並不會因此大幅度的調昇價格,降低消費者因貴不買之可能性。

由這個動態定價的實例來看,確實有機會

  1. 因為建議賣家售價,降低賣家定價猶豫的時間,提昇上架的可能性。
  2. 同時增加操縱賣家「動態售價」的可能性。
  3. 讓電商平台迅速掌握不同品項的動態定價,便可根據時間週期調整商品供需。
  4. 利用機器學習模型損失函數之搭配,來誘導賣家訂出「不割喉式競爭」的價格。

敬請期待! 即時動態定價 — 集成模型

常言道:「三個臭皮匠,勝過一個諸葛亮」,我們在動態定價 — Python實戰去!僅提及最基本的Ridge regression,試想如果我同時串連好幾個模型進行預測會不會更準確呢? 這就是機器學習中集成模型(Ensemble model)的概念,在往後的貼文,我們會使用三個不同參數的模型製作集成模型,造就RMSLE降低3%-10%的功效,使結果更加準確!

想了解集成模型與營收之間的關係嗎? 歡迎繼續閱讀

即時動態定價「實做 2」 — 集成模型(附實現程式碼)

往後的貼文都會持續在行銷資料科學粉絲專頁上發表喔!

再請大家多多follow我們的粉絲專頁:行銷資料科學

Enjoy Marketing Data Science!

共同作者:
鍾皓軒(臺灣行銷研究有限公司 共同創辦人)
羅凱揚(台科大兼任助理教授)
楊超霆(臺灣行銷研究有限公司 資料科學研發工程師)

歡迎加入我們的Line@獲取即時訊息!https://line.me/R/ti/p/%40cde8265r

您可能有興趣: