每日最新頭條.有趣資訊

用做應用題的思路,來設計你的算法

作者:不橈

全文共 4736 字 1 圖,閱讀需要 10 分鐘

———— / BEGIN / ————

在產品設計的過程中,經常會涉及到算法的設計,大家比較熟悉的,比如:千人千面的設計,電商活動商品價格分攤,股票K線等。

無論何種場景,在設計算法之前,擁有一套正確的“解題”觀念是很重要的;否則設計出來的產品經不起市場的考驗,也面臨著客戶的信任感下降甚至流失客戶。

為什麽我會將“應用題”和產品的“算法”聯繫起來?

讀書的時候,解答應用題,最正確的姿勢是:

這一系列的解題思路正好適用於我們的算法設計:

下面分享我前不久的經歷的一個實例:

一、需求描述

(審題,分析需求目標)

1.1 需求描述

競品推出了一個功能,在商品的列表和商品的詳情頁中,會綜合商品目前正在參加的促銷活動自動計算出一個折後價。

此外,根據我們的市場人員反饋,客戶對於該功能的需求比較強烈,因為我們的客戶均為B端客戶。

那麽他們在採購的過程中,對於商品的採購價即成本會比較敏感,如果能夠在採購時能看到商品的成本價,更加有助於他們進行快速購買決策,因此我們決定跟進推出此功能。

二、需求分析

(列出已知條件,提煉需求點)

2.1 競品分析

在決定跟進該功能之後,我們認真地分析了一下競品對於該功能的設計(暫不詳細描述),總結競品的設計思路及需要改善的地方。

2.2 需求分析

該功能的定位是基於單個商品計算其優惠的金額,這個在概念上來說需要與訂單的優惠區分開來,在購物車或確認訂單頁面進行下單決策的時候,客戶往往是基於整個訂單的優惠金額去考量,單品折後價則往往是在決定是否將該商品加入購物車時起到至關重要的作用,所以單品折後價更多的是展示在商品瀏覽路徑。

——(商品折後價應該在前端展示的位置)

客戶需要知道該價格是怎麽算出來的,我怎麽才能相信你我能以這個價格買到,另外我要怎麽操作才能以這個價格買到。

——(需要給出具體的計算步驟及每一步的優惠)

客戶需要看到的是最終實際採購的價格,尤其是在最終的訂單詳情及發票中如果展示活動分攤後的價格的話,那麽兩個價格應該要一致,否則客戶在購買後會感覺到自己被欺騙了。

——(折後價展示的最終價格需要與訂單詳情及發票中的價格保持一致)

計算公式不能太複雜,最好能符合客戶計算成本價的習慣。

——(優化折後價算法,盡量簡單且符合常規思路,可以允許少量偏差)

運營層面,希望客戶的下單金額越大越好。當然對於多階梯的活動來說,活動金額門檻越大,享受到的折扣幅度越大。

三、算法的設計

(分析解題思路,設計最優算法)

3.1 根據上一步提煉出的要求,提出解決方案

由於每一種類型的活動,一個訂單只能參加一次,所以基於運營層面的考慮,我們希望採購金額越大越好。(但是由於可能存在無門檻的活動,所以決定基於優惠金額去算,因為採購金額與優惠金額通常是對等的),如果一個活動存在多階梯的規則,那麽默認該商品適用優惠金額最大的規則。

由於每個活動均會設定門檻金額,只有在剛好達到門檻金額的時候是最優惠的,如滿300減10元,當購買的金額越多,分攤到每一件商品的優惠會越少,所以在計算折後價時,參考購買金額都是基於門檻金額計算。

如果需要得到最終的折扣價,由於在購買的過程中,訂單金額計算順序為 單品優惠>>滿減活動>>店鋪券活動>>平台券活動 ,即平台券活動的門檻會以使用店鋪券後的金額衡量,而店鋪券活動的門檻會以扣除滿減金額之後的金額衡量,滿減活動的參加門檻會以單品優惠後的金額衡量。

所以在計算的過程中需要將上一部減去的金額考慮進來,而且實際採購金額需按照平台券>>店鋪券>>滿減一步步往前推算(單品優惠活動對實際需要採購金額無影響)。

實際採購金額的計算:如存在店鋪券活動(滿300減30)和平台券活動(滿1000減100),那麽最終的採購金額需要達到1000才能同時參加這兩個活動,所以在參加店鋪券活動之前訂單金額需達到1000+30=1030。

但是實際上由於店鋪券活動本身就存在活動門檻,所以實際採購金額需要同時滿足著兩個條件,即實際採購金額等於兩者之間更大的那一個。

不一定該商品參加所有優惠活動的時候是最便宜的,因為活動的優惠需要平均到每個單品身上,所以當某個活動的參加門檻特別大時,反而有可能不參加這個活動獲得的優惠更多,所以需要把所有可能參加的活動組合全部計算一次。

但是這中間會需要考慮到如果參加A活動則必然會參加B活動,而這一點也不受影響,因為結果集已包含所有情況且如果在同一採購金額下,同時滿足兩種情況,那麽一定是參加活動多的那種情況更優惠

3.2 根據以上的分析,可以開始算法的設計了

3.2.1 所有活動組合

列出該商品當前參加的所有活動,將單品活動拿出來,其他活動共3種(滿減、店鋪券、平台券)進行組合,最終可能存在7種情況,即隻參加一種活動的共3種,同時參加兩種活動的共3種,同時參加三種活動的共1種。

程式中可以枚舉7種情況,每一種情況後面對應一個計算公式,與該商品參加活動的情況做匹配,所有情況如下:

隻參加滿減活動;

隻參加店鋪券活動;

隻參加平台券活動;

同時參加滿減活動和店鋪券活動;

同時參加平台券活動和滿減活動;

同時參加平台券活動和店鋪券活動;

同時參加滿減活動,店鋪券活動和平台券活動。

3.2.2 計算不同情況下實際需採購的金額

步驟1:商品匹配活動方案

找出商品所參加的所有活動及每種活動要求的門檻金額(滿減/滿折,店鋪券,平台券)。

例如:A商品原價為200,參加特價活動且特價為100,同時參加滿1000減100的滿減活動,滿100元9折的店鋪券活動。

則A商品除了特價活動之外還參加了滿減和店鋪券活動,匹配到活動方案1,2,4;且滿減門檻為1000,店鋪券門檻為100。

多階梯的滿減/店鋪券/平台券活動,選擇滿減優惠金額最大的那個規則作為滿減/店鋪券/平台券活動規則。如果活動形式為滿折,那麽使用門檻金額*折扣率作為滿減優惠金額。

例如:A商品參加滿減活動,活動規則為滿1000減100,滿2000減200,滿3000減300,那麽在計算折後約的整個過程中,默認A商品參加的滿減活動規則為滿3000減300。

步驟2:定義每種情況下的最優採購金額

假設滿減的門檻金額為X,店鋪券的門檻金額為Y,平台券的門檻金額為Z(未設定門檻則默認為銷售價)。

情況1:隻參加滿減活動,最優採購金額=滿減門檻X

情況2:隻參加店鋪券活動,最優採購金額=店鋪券門檻Y

情況3:隻參加平台券活動,最優採購金額=平台券門檻Z

情況4:同時參加滿減活動和店鋪券活動

其中在滿減活動形式為滿減時,最優採購金額=max(店鋪券門檻Y+滿減優惠,滿減門檻X);在滿減活動形式為滿折時,最優採購金額=max(店鋪券門檻Y/折扣率,滿減門檻X)。

情況5:同時參加滿減活動和平台券活動

其中在滿減活動形式為滿減時,最優採購金額=max(平台券門檻Z+滿減優惠,滿減門檻X);在滿減活動形式為滿折時,最優採購金額=max(平台券門檻Z/折扣率,滿減門檻X)。

情況6:同時參加店鋪券活動和平台券活動

其中在店鋪券活動形式為滿減時,最優採購金額=max(平台券門檻Z+店鋪券優惠,店鋪券門檻Y);在店鋪券活動形式為滿折時,最優採購金額=max(平台券門檻Z/折扣率,店鋪券門檻Y)。

情況7:同時參加滿減活動,店鋪券活動和平台券活動,情況比較複雜,所以需要分兩步計算

第一步:先計算隻參加店鋪券活動和平台券活動的情況下的最優採購金額1(方法參照情況6);

第二步:根據上一步得出的最優採購金額1,再得出最終的最優採購金額2。

其中在滿減活動形式為滿減時,最優採購金額2=max(最優採購金額1+滿減優惠,滿減門檻X),在滿減活動形式為滿折時,最優採購金額2=max(最優採購金額1/折扣率,滿減門檻X)。

步驟3:計算折扣價

在步驟2中,已經得到了最優採購金額,分別根據不同方案下的最優採購金額,計算出符合各個最優採購價條件下最終折後價,找出折後價最低的方案;計算順序依次為單品優惠,滿減優惠,店鋪券優惠,平台券優惠。

單品優惠:特價活動折後價A即為特價,買降活動折後價A即為最低的活動價;單品優惠金額=原價-折後價A

滿減優惠:(優惠金額/最優採購金額四舍五入之後保留四位小數)

優惠金額X:對於滿減形式的,則優惠金額X=活動設定的金額;對於滿折形式的,則優惠金額X=(1-折扣率)*最優採購金額;

折後價:對於滿減形式的,滿減折後價B=折後價A*(1-優惠金額X/最優採購金額);對於滿折形式的,滿減折後價B=折後價A*折扣率;

單品滿減優惠=折後價A-折後價B;

滿減優惠後金額=最優採購金額-優惠金額X。

店鋪券優惠:(券面額/滿減優惠後金額四舍五入之後保留四位小數)

優惠金額Y:對於滿減形式的,則優惠金額Y=活動設定的金額;對於滿折形式的,則優惠金額Y=(1-折扣率)*滿減優惠後金額

折後價:對於滿減形式的,店鋪券折後價C=折後價B*(1-優惠金額Y/滿減優惠後金額);對於滿折形式的,店鋪券折後價C=折後價B*折扣率

單品店鋪券優惠=折後價B-折後價C

店鋪券優惠後金額=滿減優惠後金額-優惠金額Y

平台券優惠:(券面額/店鋪券優惠後金額四舍五入後保留四位小數)

優惠金額Z:對於滿減形式的,則優惠金額Z=活動設定的金額;對於滿折形式的,則優惠金額Z=(1-折扣率)*店鋪券優惠後金額

折後價:對於滿減形式的,平台券折後價D=折後價C*(1-優惠金額Y/店鋪券優惠後金額);對於滿折形式的,平台券折後價D=折後價C*折扣率

單品平台券優惠=折後價C-折後價D

平台券優惠後金額=店鋪券優惠後金額-優惠金額Z

實際計算的時候,不參加對應的活動的時候可以跳過對應的計算步驟。

例如:A商品原價為200,參加特價活動且特價為100,同時參加滿1000減100的滿減活動,滿2000元9折的店鋪券活動,滿3000元減400的平台券活動。

則若該商品參加三種活動的情況下,最優採購金額2=max(最優採購金額1+100,1000);而最優採購金額1=max(3000/0.9,2000);所以最優採購金額1=3333.33;最優採購金額2=3433.33

最終實際計算完成後,結果如下;最終得出結果在同時參與三個活動的時候,折後價為11.65。

以此類推,計算出所有活動方案的折後價之後,最小折後價對應的方案即為最優方案。

步驟4:折後價展示

商品卡片:在銷售價後顯示折後價,顯示為“折後約¥”+“折後價”;特殊的:該商品隻參加特價活動的情況下,還是顯示原價(加劃線)。

商品詳情:商品詳情中需要展示具體的每一步的優惠金額,即需要分別展示原價,單品優惠金額,滿減優惠,店鋪券優惠,平台券優惠,折後價。

3.2.3 誤差來源

計算的過程是分多步得出數據,所以中間的四舍五入會存在一個常規的誤差;

由於後面生成訂單的時候,會按照訂單實際數據進行分攤,分攤算法的差異會造成誤差存在;

由於在訂單詳情頁無法知道最終客戶下單總金額,若未按照門檻金額下單,會造成實際享受的優惠比頁面顯示的要小;

如果一張平台券跨店鋪使用,可能會獲得更多優惠,因為在每個店鋪裡面購買的金額變少了,那麽該商品享受的優惠比例更大。

四、上線效果評估

(檢查答案的正確性)

從以下幾個方面評估功能的效果:

通過市場,客服人員收集客戶使用體驗;

評估商品瀏覽轉化率(加購物車),商品詳情頁,商品列表等頁面的停留時間。

———— / END / ————

獲得更多的PTT最新消息
按讚加入粉絲團