- Python電商數據分析實戰(微課版)
- 陳海城編著
- 2150字
- 2024-03-14 11:20:50
1.5 運籌學基礎
1.5.1 博弈論和運籌學
1.博弈論
博弈論(Game Theory)又稱為對策論,是現代數學的一個新的分支,也是運籌學的一個重要學科。博弈論是兩人在平等的對局中各自根據對方的策略變換自己的對抗策略,達到取勝的目的的一種理論。
《孫子兵法》有云:“夫未戰而廟算勝者,得算多也;未戰而廟算不勝者,得算少也。多算勝少算,而況于無算乎!”
這句話翻譯成現代漢語是說在戰前要充分估量雙方的有利條件和不利條件,這樣往往容易取得戰爭的勝利,反之則容易導致戰爭失利。算得越周詳越容易取得勝利,不算的話就只有死路一條。
孫武口中的這個“廟算”其實就是今天說的博弈。在古代,軍隊出征前都要在宗廟里舉行儀式,并商討作戰方案。
在博弈論中,每個參與者的決策都會影響其他參與者的決策,因此每個參與者需要考慮其他參與者的反應,并選擇出最優的決策。博弈論的目標是找到最優策略,使得每個參與者都能夠獲得最大收益。
博弈論被廣泛應用于經濟學、政治學、社會學、心理學等領域,可以用于分析市場競爭、投資決策、政策制定、戰略決策等問題。
2.運籌學
運籌學(Operational Research,OR)中的“運籌”兩個字出自《史記·高祖本紀》中的“夫運籌策帷幄之中,決勝于千里之外,吾不如子房”。運籌學是一種應用數學,主要研究最優化決策的問題,在研究過程中使用了許多數學工具(包括概率統計、數理分析、線性代數等)和邏輯判斷方法。運籌學的應用一般有提出問題、建立模型、制訂解法3個步驟。
運籌學最早應用于軍事活動,解決了許多重要的作戰問題?,F在其廣泛應用于各行各業,應用最多的行業如下。
(1)軍事。解決多兵種聯合火力打擊的協同作戰問題、兵力駐防問題、訓練方案問題、攻防對策問題等。
(2)工程優化。解決工程進度控制問題、工程施工方案問題、材料采購問題等。
(3)城市管理。解決城市供水和污水處理問題、警車的配置問題等。
(4)電商/零售。解決推廣方案問題、活動定價問題、客服排班問題、價格戰問題、運營方案問題等。
1.5.2 運籌學的模型
除了應用在各行各業中以外,在日常學習、工作和生活中運籌學也隨處可見,如時間管理,運籌學模型可以幫助我們分析如何爭取更多的時間。
假設小李是一名電商運營人員,每天8:30準時上班,在上班過程中有以下9個事務要處理。
(1)打開計算機,計算機開機需要1分鐘。
(2)泡一杯咖啡,需要5分鐘。
(3)查看前一天的工作日志,需要15分鐘。
(4)打開店鋪后臺查看前一天的數據,需要5分鐘。
(5)下載前一天的數據,需要10分鐘。
(6)制作日報表,需要10分鐘。
(7)撰寫工作匯報郵件,需要10分鐘。
(8)跟上下級溝通,需要30分鐘。
(9)閱讀行業信息,需要20分鐘。
已知條件:前一天數據更新可被查看或下載是在上午9:10后,工作匯報郵件必須在10:00之前發出,跟上下級溝通必須在10:00之后,在下載數據時不能同步操作計算機。
那么他應該如何合理安排工作流程?最早可以在幾點結束工作?
這就是一個求最優解的問題,需要運用運籌學來解決這個問題。
第一步,提出問題——如何讓時間得到合理應用,讓自己空出更多的時間。
第二步,建立模型。
分析:小李的9個事務中,有些是可以并行的,如打開計算機等待的1分鐘可以用來同步執行第2個事務。
該模型的一般數學形式可以表示為
U = f(x,y,e) (1-2)
式中 x——可控變量;
y——已知參數;
ε——隨機因素。
第三步,畫出關系圖。
根據已知條件,確定各個事務的關系,如圖1-9所示。
第四步,制訂事務流程。
如圖1-10所示,根據事務之間的邏輯關系和特定條件,制訂事務流程,小李最早可在10:45完成9個事務。

圖1-9 事務關系圖

圖1-10 制訂事務流程
1.5.3 規劃求解的經典問題
規劃求解在電商領域中是一個非常經典的問題,可用于解決某項任務的合理分配問題。例如:廣告投放問題,假設有1000萬元的廣告預算,應該如何合理安排投放到各個平臺,讓廣告效益最大化?

規劃求解
【例1-7】淘寶投放廣告的站內渠道有直通車和鉆展,直通車是按單擊量付費的,鉆展是按展現量付費的。根據歷史數據了解,到直通車的CPC(平均單擊單價)是0.36元,轉化率是3.4%,鉆展的CPC是0.65元,轉化率是4.1%。已知有1000萬元的廣告預算,平均客單價是100元,由于協議規定各個渠道的投放都不能少于300萬元,請問如何規劃廣告預算才能讓廣告效益最大化?收益率預估為多少?
解 設直通車的廣告投放預算為x1,鉆展的廣告投放預算為x2,則有
x1+x2=10000000 ①
x1≥3000000 ②
x2≥3000000 ③
x1÷0.36×0.034×100+x2÷0.65×0.041×100=MAX ④
即(9.44×x1+6.31×x2=MAX)
根據④可知,要想求得最大解,關鍵在于求x2,若x2最大就能達到最優解。即
9.44×7000000+6.31×3000000=85010000
收益率=85010000÷10000000=8.501
運用Python解決此場景,代碼如下:
# 加載線性規劃的庫 from scipy.optimize import linprog ''' 設直通車的投放預算為x1,鉆展的投放預算為x2: (①)x1+x2=10000000 (②)x1≥3000000 (③)x2≥3000000 (④)x1÷0.36×0.034×100+x2÷0.65×0.041×100=MAX 即(9.44×x1+6.31×x2=MAX) ''' # 設置①的系數 A_eq1 = [[1,1]] # 設置①的條件 b_eq1 = [10000000] # 設置②和③的條件 x1 = (3000000,10000000) x2 = (3000000,10000000) # 設置④的系數,注意求解最大值時系數前要加負號 c1 = [[-9.44,-6.31]] # 使用 linprog()函數求最優解 res1 = linprog(c1,A_eq=A_eq1,b_eq=b_eq1,bounds=(x1,x2)) # 獲取最優解中全部的值 x = res1.get('x') # 廣告收益最大值 fun1 = abs(round(res1.get('fun'))) # 直通車投入金額 x_1 = round(x[0]) # 鉆展投入金額 x_2 = round(x[1]) #收益率計算 fun2 = fun1/10000000 print(’廣告收益最大值 :' ,fun1) print(’收益率:',fun2) print(’直通車投入金額 :' ,x_1) print(’鉆展投入金額 :' ,x_2) Out: 廣告收益最大值 : 85010000 收益率: 8.501 直通車投入金額 : 7000000 鉆展投入金額 : 3000000
從輸出結果可以看出,當投放直通車金額為700萬元,鉆展投放金額為300萬元時就能讓廣告效益最大化,其收益率預估為8.501。