數據帶你領略,超市貨架的擺放藝術

文/數據俠 Singh

當你在逛超市的時候,你有沒有想過商場里的商品的擺放方式有什麼講究?隨著新零售時代的到來,超市如今已經開始逐漸轉向精細化運營時代。面對成千上萬商品,通過數據收集和分析技術不斷提升銷售效率是零售超市們如今最關心的事情。其中,如何讓貨架空間最大化是其中的關鍵因素之一。數據俠Deepesh

Singh使用python和貪婪演算法告訴你:貨架空間優化的奧義就藏在那些簡單的數據里。

定義我們的問題

在商店裡,一個產品的位置很大程度上影響了它的銷售情況。為不同的產品,不同類別分配適當的空間和布局,在零售業中起著至關重要的作用。

從零售商的角度來看,鑒於貨架位置的價值,確保零售空間的充分利用,對於商店價值最大化的工作至關重要。

(圖片說明:超市中常見的貨架擺放方式)

一般來說,POS機附近的貨架會為客戶提供最大的曝光度。顧客在排隊結賬時客觀上必須瀏覽這些列表商品。儘管這些商品的價格只有幾塊錢,如果在正確的時間,正確的地點,以正確的數量銷售正確的商品,就可以幫助商店賣出更多的商品,這是零售業收入和盈利能力的關鍵。

這一方面導致了品牌間的戰爭——勝者才能佔據商店中最好的展示位;另一方面,商店也需要考慮到所有不同商品的銷售情況,通過整體規劃優化其盈利能力。

雖然這個邏輯很好理解,但應用起來可並不簡單。空間優化所需的信息在整個業務中的大部分時間都是模糊、複雜、分散的。

某些產品在整個營銷中可能扮演的是至關重要的角色; 其他產品可能只是附屬品,用來提供更高的邊際效用。因此,僅僅使用一個變數來衡量他們就變得非常困難。

更何況,平均一個零售商店裡就有將近3萬個SKU(stock keeping unit庫存單位)。每年在零售店還會推出數千種的新產品。面對如此大數據量的問題,優化就變得非常困難。

但是我們的目標很明確:就是通過整合擺放策略,最大化超市的銷售總額。

用線性規劃來優化的策略

在分析正式開始前,我們再來說一點基礎知識。首先,什麼是優化呢?說起來很簡單,優化就是在特定約束條件(constrains)下找到最佳解決方案的科學過程。

我們每天其實都會遇到各種優化的問題。優化可以是找到工作場所和辦公室之間的最短路徑; 可以是最大限度地提高收入/客戶的幸福感,或者最小化成本/債務,不一而足。

一句話,優化就是把一個真實世界的問題,用數學的方法進行建模,然後用數學方法在約束條件下求解。優化在市場營銷,製造業,金融,在線廣告,機器學習以及任何你可以想像的所有領域都很有用。

線性規劃(Linear Programming,也稱為線性優化)是指在需求由線性關係表示的數學模型中實現最佳結果(如最大利潤或最低成本)的方法。線性程序可以表示為:

  1. 決策變數
  2. 目標函數:必須是線性的
  3. 限制:必須是線性等式或不等式。

線性規劃演算法在可行空間中找到一個點,其中如果存在這樣一個點,則目標函數具有最小(或最大)的值。單純形法(simplex algorithm)是最常用的線性規劃演算法。

整數規劃是線性規劃的一個特殊情況,其中決策變數被限制為整數。對於整數規劃的問題,我們一般只有二元輸出結果,即非0即1。

下面我們就以一個簡單的例子來說明優化是具體如何操作的。這雖然是一個很小的問題,但是相同的概念可以被擴展到更大的問題上。讓我們現在小數據的情況下來了解問題。

假設一個有3個貨架的零售店:貨架1,貨架2和貨架3。每個貨架分別有3個、3個和4個架子(如下表所示)。我們必須出售3家公司的產品:Unilever(聯合利華,英荷聯合公司),Godrej(戈德瑞,印度公司)和Dabur(印度草藥公司)。Unilever,

Godrej和Dabur三家公司分別有3種、3種、2種不同的產品。

我們在矩陣中看到的數字是將特定產品放置在特定一排(rack)中的特定一個貨架(shelf)上實現的銷售增量(lift)。

現在,由於產品的利潤率/庫存成本/需求/過期時間等差異,商店希望優化每個產品在貨架上的位置,並最大化銷售總額(產品數量),同時考慮到一些已有的限制條件。

決策變數將採用與lift矩陣(10* 8)相同大小的矩陣的形式。矩陣內的元素是一個二元變數:1表示產品/貨架的匹配是對的(Yes);0表示產品/貨架的匹配是錯的(No)。我們將從所有元素都是0的矩陣開始,並允許求解器在需要時更改為1。

要注意的是:我們目標函數的目標就是最大化所有商品的總銷售額。

這裡用的限制是:

  1. 一個貨架(shelf)上最多只能有某個公司的一個產品(行約束)
  2. 產品不能擺放超過一定數量的貨架。這是按照上圖所示的產品順序給出的列約束。產品的最大出現情況如下,這些限制可以歸因於產品類型/利潤率/需求或任何其他適用於商店的理由。

上圖的意思是是聯合利華的產品1不能銷售一次以上;Godrej的產品1不能上架超過兩次。其他情況依次類推。(根據不同商店對不同商品的策略和理解不同,實際情況中可能會有多種多樣的限制。但我們這裡只是希望展示如何實際解決線性優化的問題,所以就只給出一個簡單的限制條件。)

當我們確定了目標函數、限制約束條件後,這種簡單的線性優化就可以使用EXCEL中的solver功能進行操作。我們最終目標函數算出來最大的銷售量是4197。最大情況下給出的決策矩陣如下圖。

但是Excel有個致命的缺陷,就是它無法處理大樣本的數據。另外,如果有很多限制條件的話,Excel跑起來也會非常地吃力。但還好我們有Python來救場。

數據太「大」怎麼辦?Python說這個它能幹

用EXCEL來進行優化太繁瑣了,不利於用於日常操作。Python可以很容易地解決數據大小的問題,只會受到計算速度的限制。此外,一旦編碼/自動化,這個程序就可以應用於任何數據量的問題;任何新的約束條件也可以隨時加入進來。

在這裡,我使用了python中的Pulp庫。求解器(solver)我用的是開源的CBC。當然還有其他一些商用的solver,如CPLEX,GUROBI等,這些solver可用於data size的問題,因為它們的速度更快,結果更好。

當我們重複一遍上述過程後,你會發現Python得到的結果和Excel得到的結果完全一致。再次印證了結論,4197是總銷售增量的最大值。

現在我們來討論下大數據會帶來什麼樣的問題。在這個例子中,我們知道每個決策變數可以取值為0或1,即2 ^ 1也就是2個可能的值。

如果現在是2個決策變數,可能組合的總數可以是2 ^ 2也就是4,其中一個/多個都可以給出目標函數的優化值。當情況需要考慮的有80個決策變數時,總的組合是2 ^ 80。決策變數增多帶來的問題是指數性增加的而不是線性的。

(用計算複雜性理論(Computational complexity theory)的理論來說,就是指數時間演算法O(2 ^ n)]。即使是最好的電腦,指數時間演算法的問題也是非常大強度的。正如在我們的例子中,所有2 ^ 80組合都需要被評估以找到優化的解決方案。)

這裡開始就需要商業理解和專業知識的幫助了。一名行業專家可以很快地排除掉不合適的組合,通過使用合適的約束條件,減少需要排查的可能組合的總數,從而大大降低了計算量。

生活中無處不在的「優化」商機

上面我們展示優化問題的基本實現過程,接下來讓我們來了解優化問題在其他領域的一些應用。

谷歌的AdWords:Google使用線性規劃來優化在線廣告。Google在其搜索頁面上有不同的廣告窗口,並基於PPC(每次點擊的價格),CTR(點擊率)和廣告客戶的預算——這些約束條件,來分配廣告窗口和播放次數(這個是決策變數)以最大化其收入(目標函數)。AdWords帳戶約佔Google收入的97%。

(圖片說明:Google Adword廣告系統的收費標準靈活,會根據點擊和來電通話次數等效果來收取費用,約束條件較多,是線性優化的經典案例;圖片來源:Google Adword官網截圖)

航空公司的收益管理(Revenue Management):航空公司使用線性優化來決定提供多少打折機票(決策變數),在考慮到預測的需求(約束條件)和飛機型號(有限的座位,也是約束條件)情況下,最大化其收入(目標函數)。

癌症治療:線性規劃用於通過輻射來治療癌症患者。在有限的輻射水平下(約束條件)向腫瘤細胞進行靶定位輻射,並且同時健康組織應暴露於最少量的輻射下(使目標函數最小化)。

電視頻道的推廣廣告:一個電視頻道有數十個節目,但卻有數以千計的促銷,且廣告需要在這幾十個節目中穿插。通過線性優化,他們決定在哪個廣告位進行電視廣播,並保持高收視率(目標函數)。這裡的約束條件可以是每次廣告的預算,一個廣告最大的出現次數等等。

約會網站:線性優化也被用於線上約會網站,比如eHarmony。基於每個用戶填寫的問卷,eHarmony計算兩個人之間的匹配值,並使用線性規劃等優化演算法來確定用戶的最佳匹配對象。這裡可能的限制是男性只與女性相匹配; 男性用戶需要匹配的是女性,反之亦然。

這次給大家演示的只是一個非常簡單的例子,如果是真實的貨架優化問題,那涉及到的可是成百上千個貨架。而相應的約束條件也會增加到成百上千個。所有這一切的目的就是讓一個商品出現在正確的地方,從而使得銷售量最大化。

註:本文編譯自Deepesh Singh 的博客文章《 A Beginner』s guide to Shelf Space Optimization using Linear Programming》,文中圖片除特殊標註外,均來自原文。本文僅為作者觀點,不代表DT財經立場

在優化貨架問題中,作者還嘗試了「貪婪演算法」來代入優化模型。不過貪婪演算法本身的演算法邏輯並不適合本文的整體優化問題,DT君編譯時省略了這部分嘗試的內容。

DT君送福利:在原文中,作者詳細地列出了EXCEL和Python的操作代碼及步驟,為了保證閱讀流暢度,我們沒有將其羅列在文中。感興趣的讀者可以後台回復「擺放藝術」,獲取作者原文鏈接。

編譯 | 數問團隊

題圖 | 視覺中國

期待更多數據俠乾貨分享、話題討論、福利發放?在公眾號DT數據俠(ID:DTdatahero)後台回復「數據社群」,可申請加入DT數據社群。

數據俠門派

本文數據俠

Deepesh Singh 是一位數據科學愛好者。他是一名持續的學習者,熱愛探索數據科學的不同領域。他是NIT

Silchar的一名工程師,擁有IIM-L和KSB(印第安納大學)商業分析一年的證書,目前正在解決分析機構班加羅爾辦事處的業務問題。在工作之外,他喜歡會議主持人,在健身房鍛煉,練習、教導空手道。

DT字幕組

感謝「數問」團隊對本文的翻譯貢獻。

數問數據科學平台是一個一站式數據玩家的驛站,目前有問答、競賽、工作、線下活動等內容版塊。任何數據愛好者都可以在平台上提問題、找答案、分享學習資料和經驗、對接資源等。他們希望幫助各個階層的數據使用者解決「從哪裡來」,「到哪裡去」的問題。

「DT字幕組」致力於發掘和傳播全球數據領域的優質內容,長期招募組員,歡迎郵件聯繫:chengyixiang@yicai.com。

加入數據俠

「數據俠計劃」是由第一財經旗下DT財經發起的數據社群,包含數據俠專欄、數據俠實驗室系列活動和數據俠聯盟,旨在聚集大數據領域精英,共同挖掘數據價值。了解數據俠計劃詳情請回復「數據俠計劃」,投稿、合作請聯繫datahero@dtcj.com。

推薦閱讀:

大數據帶你挖掘打車的秘籍
活動回顧 & 預告 | 25Meetings- 數據的海洋心懷天下
Facebook 前產品總監: 我不招只想當 CEO 的產品經理丨數據工匠簡報(8.01)
DMP核心流程-樣本訓練【技術類】

TAG:大数据 | 仓储货架 | Python |