匹配策略:為什么打車軟件不給你最近的車?

28 評論 28982 瀏覽 215 收藏 8 分鐘

好久沒有更新,最近大出行領域風起云涌,那么就趁著這個機會簡單聊一下打車的匹配策略。

本身服務匹配算法是非常復雜的,要考慮多個因素,但是如果我們只看最基本的邏輯,服務匹配就是將多個服務者和多個用戶之間進行匹配。這篇文章會簡單介紹如何構建匹配度,同時具體如何對匹配問題求解。

1. 匹配度構建

匹配度的構建其實并不復雜,就是構造一個計算用戶需求和服務者之間的相關性的方法。復雜的是確認清楚我們的目標是什么。介紹核心函數的構建我們仍然以打車為例。

比如在打車的時候,我們可以先思考下有哪些因素是乘客叫車的時候乘客比較關心的。首先乘客最關心的就是司機和乘客之間的距離。對于每個乘客而言,距離越近就意味著司機趕過來越快,等待時間越短,在大多數情況下,快速上車出發是乘客的第一需求。乘客關心的第二個問題是司機的服務,具體體現在乘客對于司機的評價和司機的服務單量上,用戶評分越高的司機往往更能提供優質的服務,如果可以周圍有大量司機可以選擇的話,乘客期待評分更好的司機。對于司機而言,司機期待乘客的終點是熱點地區,這樣可以獲得更高的收入,如果周圍有大量的乘客,那么單純從效率的角度看,我們更應該匹配目的地在時空價值更高時間域的訂單。如果業務取向真的是上面分析的這樣,那么用戶和司機的匹配度函數就應該由三個因子構而成。不過當多個參數在同一個函數中的時候,就需要對每個參數進行有效的歸一化和變形,才能讓結果符合預期。

需要強調的一點是,當我們對每個用戶和周圍的司機都有相關度計算,可以知道對每個用戶最合適的司機,也并不意味著所有用戶都可以得到最合適的司機。這就回到了一個用戶經常抱怨的問題:為什么打車軟件不給我派最近的車?

即使核心函數中只有距離一個因子,也不一定會給每個用戶都匹配最近的車。具體case如下圖所示:

在左邊的圖中,距離用戶A最近的車是a,在這種情況下可以給用戶A派最近的車。但是如果如右邊圖所示,同時有兩個用戶呼叫,這種情況下,給用戶A分配車輛a,會導致B分配到的車都會比較遠。就應該給用戶A分配車輛b,給用戶B分配車輛a。而實際在設計的服務匹配方法中還需要考慮多種其他因素,比如服務、公平等因素,就更不可能給所有用戶都分配最近的車。

從這個例子中看出,系統應該尋求的是整個系統匹配度最大化。下面我們會詳細闡述可以用什么樣的方法來達到系統的最優化。

2. 二分圖匹配

二分圖是圖論中的一種特殊模型。 通俗解釋的話,二分圖有兩個特點,在二分圖圖中的點可以分到兩個互不相交的子集中,同時每條邊都需要連接這兩個子集。如果有這個定義去看的話,一段時間內,乘客和司機的匹配問題就是典型的二分圖問題,兩個集合分別代表司機和乘客,司機和乘客的匹配度則代表司機的邊長。

在二分圖中,有一個經典問題就是如何求二分圖的最大匹配。最大匹配的定義就是任意交點只連接一條邊的最優解。具體到打車問題中,就是尋找讓整個系統叫做多的人叫到車,所有人和司機之前的匹配度之和最大。這也正是我們希望得到的線下交易系統最好的匹配結果。如果我們能找到二分圖的最大匹配算法,就能用這個算法作為線下交易匹配的問題。

值得慶幸的是二分圖問題是有典型的求最大匹配的算法的。二分圖問題本質上也是線性規劃問題,用線性規劃的單純形法也可以作為迭代方法。不過因為這種方法效率低下,工程上不會使用。在工程上使用最大流、匈牙利算法或者KM算法都可以作為最大匹配問題的解法,尤其是KM算法基本就是為了解決二分圖這種特殊問題設計的算法。這三種算法在效率和原理上是基本通用的,這里涉及一些基礎圖論問題,就不對這些算法做數學展開,有興趣的讀者可以從網上查找KM算法相關資料。

當然,即使不了解KM算法的數學原理,但是并不妨礙我們理解使用這種方法。KM算法要求的兩個集合中的不同點的匹配度作為邊長,權重越大則代表匹配度越高。算法通過迭代會給出匹配度最高的匹配組合,也就是我們需要的全局最優解。在KM算法中,只要將所有我們需要的因素都考慮進入匹配度算法中,那么這個算法就可以每隔一段(比如10s)時間執行一次,每次服務者和用戶退出匹配系統,也會有新的服務者和用戶加入匹配系統,算法循環執行,不斷匹配。

3. 給太長不看的朋友

打車的匹配策略就和男生和女生相親一樣。為什么不給所有男生自己最喜歡的女生,因為資源有限,一個女生也不能分給一堆男生。那么最好的結果就是每個人都找到差不多和自己匹配的人,讓整個系統成雙入對的情侶滿意度總和最高。

那么回到打車的問題,為什么不給你最近的車,因為同時有一堆人想要最近的車,系統不能保證給每個人最近的車。那么最終系統的優化目標就變成了最大化整體的效率和體驗指標。不給一個特定最近用戶最近的車,是因為對于系統而言,最優化的目標是系統的最優化,不是針對每個人的最優化。

#專欄作家#

潘一鳴,公眾號:產品邏輯之美,人人都是產品經理專欄作家。畢業于清華大學,暢銷書《產品邏輯之美》作者;先后在多家互聯網公司從事產品經理工作,有很多復雜系統的構建實踐經驗。

本文原創發布于人人都是產品經理。未經許可,禁止轉載。

題圖來自 Unsplash,基于 CC0 協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 從這第三點可以看出作者很懂用戶了

    來自上海 回復
  2. 有道理

    回復
  3. 非常有道理,詳細解釋了“假、大、空”的原則

    來自上海 回復
  4. 贊太長不看。

    來自浙江 回復
  5. 抱歉,我是小白,我只想說借口。呵呵,一大堆閑置車輛在路口等著單,一大群人在等單,但是就是等單子的車依然在等,等車的用戶依然在等。田忌賽馬不行么?對等馬,最后浪費了太多時間。一開始的計算公式也是這樣的?剛開始為什么能夠做到最近派車?滴滴美團一起火拼時候為什么派車都是幾百米的?

    回復
  6. 寫的不錯!

    來自廣東 回復
  7. 像這樣的策略是產品經理來弄還是技術自己去弄的

    回復
    1. 運營和產品制定思路,和技術討論實現方案的邊界

      來自北京 回復
  8. 你們想多了,其實最遲這是為了防止刷單,防止下單人和接單人都相互在一起的(引申告訴你,是同一個人,不要問我為什么知道,因為我在..

    回復
    1. 沒錯,確實是這樣

      來自北京 回復
    2. 大神好

      回復
  9. 個人利益與集體利益

    回復
  10. 其實滴滴沒有做附近的車本質并不是“因為同時有一堆人想要最近的車,系統不能保證給每個人最近的車?!捌鋵崗挠脩粜枨笈c場景出發思考
    1.因為用戶出行的場景更多的關心是我需要在這里上車,而不是跑去附近找車上車,如果要做附近的車就意為要我去找附近的這輛車,滴滴是車找人,不是人找車
    2.一般滴滴司機都是開著車兜來兜去,并不是固定一個點停車在等待,車子位置變動就會導致技術上做的位置匹配的難度
    3.為什么共享單車、共享汽車都做附近的車,因為它們停車的位置是固定的,固定的位置就很容易找到車

    回復
    1. 說得好

      回復
    2. 回復
  11. 確實,打車軟件確實要考慮這些方面的事情。

    回復
  12. 同時打車是個什麼情況?同一秒hais同一分鐘?

    回復
  13. 第2點沒看明白,其中引用了幾個算法的專業名詞,可能平時沒怎么接觸過算法這一塊,無法理解吃透;第1點說的通俗易懂;整體上這是一篇很不錯的維度的分享,感覺作者為我們解惑、掃盲;

    回復
    1. 為什么你有會員頭銜?

      來自廣東 回復
  14. 全局最優的情況下可能會導致個別用戶等車時間很長,但是總體來說會使得用戶平均等待時間最低

    回復
  15. 了解到uber給用戶派車永遠是第二近的車,這是為什么呢?

    回復
  16. 抱歉,我是新手,不知道你在說什么,所以我表示支持一下

    回復
  17. 嗯。系統最優化,而不是個人最優化。受教了。也對打車算法有了一個初步了解。以后在設計系統的時候也要多考慮,爭取做到系統最優

    來自江蘇 回復
  18. 竟然涉及到了核心的算法,了解一下

    來自湖南 回復
  19. 算法要根據人性的變化而變化,推導的算法本身就不是很看好。

    來自北京 回復
    1. 你這個騙子,差點就相信你是小盆友了

      回復