滴滴演算法大賽演算法解決過程 擬合演算法

2022-01-12 09:38:07 字數 2578 閱讀 1673

概論

gap的**,是建立在乙個擬合函式上的。也有一些機器學習的味道。

總的gap函式 = 函式(時間,地區)

交通流量和時間有關,乙個地方的擁堵程度和時間有關係

不同的地區,各種設施配置不同。

天氣和時間有關。

gap函式 = 函式(交通擁擠度函式(時間,地區編號),poi函式(地區編號),天氣函式(時間))

這裡可以認為,乙個地方的打車人數,交通越堵,則打車的gap越大。天氣不好,打車的人則越多,gap也越大。設施越多的地方,打車的需求也越多,gap可能也越大。但是這一切都只是可能性。

(題外話,其實真實的情況也要考慮節假日的問題,在節假日的時候,gap可能會變大。當然這是乙個人文的考量了)

zhihu網友的演算法

利益不相關,不是參賽選手,不是滴滴工作人員,純粹覺得題目好玩。

我的分析:

這個題目的目標是**,**的核心是發掘資訊,資訊才是消除不確定性的唯一途徑。資訊存在於乘客與司機的幾種行為模式,以及poi的不同功能型別。

乘客的行為基本上有三類模式,週期性的(每天上下班、每週去上補習班)、集中偶發性的(**會)和隨機性的(各類雜事)。司機的行為模式包括出車、收車、找活、趴活、午休。poi型別也可以分為週期性的(工作單位)、集中偶發性(電影院、體育館、演播大廳)、隨機性的(醫院、車站),當然每個poi的功能型別不是絕對的。

gap是用車需求和供給的差,那麼分別為需求和供給建立模型。

簡單說,乙個完整的打車需求包括出發地、目的地、時間。首先任意兩個poi之間都存在一條線路,每條線路的**量可以按照乘客的行為模式進行分解,這樣也就包含了時間因素。這樣最終就可以算出從每個poi出發的人數。由於資料只有方格的總數,這看起來是乙個隱馬爾科夫鏈。至於天氣則基本可以看成線路**量的乙個係數。

司機接單在全天大多數時間裡都是找活的狀態,也就是附近有單就搶,那麼某個方格某個時間片司機接單數應該是空車數量*乙個係數,空車數量=上乙個時間片到達的乘客數+其他司機漫無目的找活出入方格的淨值+趴活司機數(找活、趴活數應該和poi型別有關,這得問問老司機拉活的竅門),係數就是搶單成功率。

非專業人士,以上只是粗淺的想了一下,還有很多細節沒有考慮,拋磚引玉,達人莫笑!非專業人士,以上只是粗淺的想了一下,還有很多細節沒有考慮,拋磚引玉,達人莫笑!

交通擁堵

交通擁堵函式:

這裡的交通擁堵函式是使用4個等級表示的。

在上文中 滴滴演算法大賽演算法解決過程 - 資料分析 提過了通過統計分析可以得知,lv1的路大約佔2/3強,估計lv4,lv3的路是變化的關鍵。

由於資料量非常龐大,所以這裡建議將中間的計算結果也放入資料庫中備用。

不支援放大功能,如果您想更好的檢視,也可以使用以下**獲得更好的閱讀體驗:

我們嘗試使用最小二分法擬合 lv4和 訂單總量

從圖中可以看到,大部分的點在乙個 y = ax+ b 的直線函式中。

(未去噪點)

a:4.67355309006603

b:18.931303546517

(去除1500以上的噪點)

a:1.08888907683687

b:192.700547917395

(這裡使用的是2016-01-01 #51 的資料)

#region 最小二乘法擬合

//////用最小二乘法擬合二元多次曲線

///例如y=ax+b

///其中multiline將返回a,b兩個引數。

///a對應multiline[1]

///b對應multiline[0]

//////已知點的x座標集合

///已知點的y座標集合

///已知點的個數

///方程的最高次數

public static double multiline(double arrx, double arry, int length, int dimension)//二元多次線性方程擬合曲線

guass[i, j] = sumarr(arrx, i, arry, 1, length);

}return computgauss(guass, n);

}private static double sumarr(double arr, int n, int length) //求陣列的元素的n次方的和

return s;

}private static double sumarr(double arr1, int n1, double arr2, int n2, int length)

return s;

}private static double computgauss(double[,] guass, int n)

}if (k != j)

}if (0 == max)

for (i = j + 1; i < n; i++)}}

//結束for (j=0;j= 0; i--)

x[i] = (guass[i, n] - s) / guass[i, i];

}return x;

}//返回值是函式的係數

#endregion

滴滴演算法大賽演算法解決過程 機器學習

按照前面文章的方法進行資料 完全不使用poi,天氣,交通情況的資料,可以達到0.43的成績。不過如果想要獲得更好的成績,簡單的 方法顯然無法滿足要求了。說可以使用gbdt的方法來進行資料 所以,我們先來聊聊gbdt演算法的一些基礎知識。熵熵 entropy 指的是體系的混亂的程度,它在控制論 概率論...

滴滴演算法大賽演算法解決過程 機器學習

按照前面文章的方法進行資料 完全不使用poi,天氣,交通情況的資料,可以達到0.43的成績。不過如果想要獲得更好的成績,簡單的 方法顯然無法滿足要求了。說可以使用gbdt的方法來進行資料 所以,我們先來聊聊gbdt演算法的一些基礎知識。熵熵 entropy 指的是體系的混亂的程度,它在控制論 概率論...

滴滴演算法大賽演算法解決過程 方案設計

上面兩篇文章講了一些分析情況,整個模型變得很不確定了 資料分析 擬合演算法 滴滴演算法大賽到底需要什麼樣子的答案?我一開始的想法是建立乙個模型,通過天氣,poi,交通擁堵的引數來推導出訂單數和gap數。但是通過現有的資料發現,這個模型很難建立。其實看一下題目,這是乙個 題 給定每個區域在時間片tj,...