事先說明:這是一篇會讓人想吐的文章俩由,如果你看到一半感到身體不適毒嫡,請果斷關(guān)閉瀏覽器。
問題提出
在一個以頁為單位的信息交流平臺上,一個不可避免的問題就是如何為這些信息做一個恰當?shù)呐判颉?br>
這種行為的出發(fā)點有很多兜畸,比如要找出最有用的信息努释,最受歡迎的信息,最讓人喜歡或者討厭的信息咬摇,最有趣的新聞伐蒂,最Hot的熱點,等等肛鹏,這都需要排序逸邦。
排序的指標是什么,指標如何量化在扰,這些都不是本文要說的內(nèi)容缕减,于是忽略不提惋鸥。
那么茄袖,我們假定已經(jīng)為文章列表{A_i}訂好了一個屬性I(A_i),來表示這個量化的排序指標颅围,剩下的事情就容易了皱卓,以I(A_i)為指標做降序(或者升序)處理裹芝,事情就做完了。
似乎一切都很簡單娜汁。
下面局雄,讓問題復(fù)雜一點,假定一個平臺上有N個人存炮,文章A_i被其中的n(A_i)個人看過炬搭,并被賦予了指標值I(A_i),請問如何排序穆桂?
乍看之下宫盔,這個問題似乎沒什么營養(yǎng),還是根據(jù)I排序就好了嘛享完。
但灼芭,如果我們將問題這么描述,會如何呢——
給出一篇文章在整個平臺上的預(yù)期受歡迎程度般又,并以此來排序(假定I表示的就是受歡迎程度)彼绷。
顯然,既得值I(A_i)并無法完全表達“預(yù)期受歡迎程度”這個需要的量茴迁。
一個最簡單的做法寄悯,就是I_pre(A_i)=I(A_i)/n(A_i)*N。
從這里開始堕义,問題就要開始變得復(fù)雜了猜旬,而且是越來越復(fù)雜。
一個可選的方向,是下面分析文章A_i的興趣集洒擦,并且和人群的興趣集做分析椿争,以此來給出在離散空間中的耗散動力學(xué),這基本算是網(wǎng)格模擬的問題熟嫩,我們這里不做進一步考慮秦踪。
另一個這里更有興趣的問題,就是考慮上“時間”的因素掸茅,來看看對“預(yù)期”這個謂詞來說洋侨,會帶來什么樣的影響。
比如說倦蚪,如果我們將文章的“點擊數(shù)”和“點贊數(shù)”的比值作為評判一篇文章質(zhì)量的標準希坚,那么顯然這個值是會隨著時間的改變而改變的,那么我們?nèi)绾潍@得這個值的“真實正確”值陵且,來建立一個合理的排序呢裁僧?
所以,下面的內(nèi)容就是建立各種模型慕购,來模擬N個元素中n個已經(jīng)參與過投票的情況下聊疲,如何推算出最終的弛豫值。
最簡模型及其近似解
現(xiàn)在重新明確一下問題沪悲,并做恰當?shù)暮喕?br>
<blockquote>
現(xiàn)在有兩個空間A和B获洲。A中有N個元素,B中有P個元素殿如。
A中元素可以對B中元素做兩個操作x和y贡珊,且要執(zhí)行y必須先執(zhí)行x,且x和y只能執(zhí)行一次涉馁。
每一個時間點门岔,A中元素都可以對B中元素進行操作,記為“一次”烤送。
問題:已知B中元素p第一次操作的結(jié)果為n個A中元素對其進行了x操作寒随,m個A元素進行了y操作,求第t次x和y的可能操作數(shù)帮坚。
</blockquote>
問題描述到這里妻往,其實還不夠完整,因為A的具體性質(zhì)對上述問題有著關(guān)鍵的影響试和,于是下面給出A的性質(zhì)描述:
<blockquote>
A中元素a與b相連的概率為p讯泣。
如果a對B中元素m進行過操作y,則在下一次操作時灰署,若b與a相連且沒有對m進行過x操作判帮,則b會對m進行x操作局嘁。
A中元素q如果對B中元素m進行了x操作溉箕,則有一定的概率q進行y操作晦墙。
</blockquote>
到這里,事情就開始有趣起來了肴茄,我們可以建立在這樣的系統(tǒng)上y操作的傳播動力學(xué)晌畅,其基本運動方程為:
<pre>
N_{n+1}=[1-(1-p)^{q N_n}](N-\sum\limit_{i=0}^n N_i)
</pre>
當然,就實際來說寡痰,需要對上述式子加一個取整函數(shù)抗楔,所以就是:
<pre>
N_{n+1}=Round{[1-(1-p)^{q N_n}](N-\sum\limit_{i=0}^n N_i)}
</pre>
到了這一步,用計算機模擬總是沒問題的拦坠,但如果想要用解析的手法來獲得一些結(jié)果连躏,則將變得素手無策。
我們可以用一些近似的手段來處理這個函數(shù)贞滨,使得不用計算機模擬也能得到一定程度的解析結(jié)果入热。
第一步,是將上述差分方程做一個近似晓铆,其近似前提是A的元素總數(shù)N足夠大勺良、p足夠小:
<pre>
N_{n+1}=p q N_n (N-\sum\limit_{i=0}^n N_i)
</pre>
第二步骄噪,是給出差分方程近似的微分方程:
<pre>
y: \sum\limit_{i=0}^n N_i
y': N_n
y'': N_{n+1}-N_n
y''=Cy'[pq(N-y)-1]
</pre>
這里的C是由差分和微分的轉(zhuǎn)變而帶來的系統(tǒng)參數(shù)尚困,我們可以通過第一代數(shù)據(jù)的簡單計算來作擬合,從而是解析的链蕊。
這個方程的解為:
<pre>
S_n = \sum \limit_{i = 0}^n N_i) = [p q N - 1 + tanh(C n + A)] / (p q)
N_n = [tanh(C n + A) - tanh(C n + A - C)] / (p q) n > 0
</pre>
其中A為待定參數(shù)事甜,由代數(shù)方程y(0)=N_0給出,這里的N_0是第0代的“初始”進行x操作的A的元素的數(shù)量滔韵,因此參數(shù)A也是可以通過初始條件解析得到的:<code>A = arctanh[1 - p q (N - N_0)]</code>讳侨。
進而利用第一代數(shù)據(jù)N_1=y(1)-y(0)給出待定系數(shù)C:<code>C = arctanh[1 - p q (N - N_0 - N_1)] - A</code>。
而N_1可以通過已知條件獲得:<code>N_1 = [1 - (1 - p) ^ {q N_0}] (N - N_0)</code>
而最后奏属,原本用取整函數(shù)來獲得的“截斷”則由y'(t)<B這個代數(shù)方程來獲得臨界t跨跨,而B的“自然”值得當然是1,雖然就擬合來說實際值應(yīng)該大于1囱皿。
具體截斷方程為:
<pre>
B > [tanh(C m + A) - tanh(C m + A - C)] / (p q)
</pre>
從而可以得到截斷臨界時間m勇婴,并利用m獲得最想要的數(shù)據(jù):S_m。
到這一步嘱腥,所有數(shù)據(jù)都可以解析獲得耕渴,于是我們可以很好地分析傳播相關(guān)的各種性質(zhì),包括一篇B中元素可以獲得的最終x操作數(shù)<code>X = S_m</code>(最終y操作數(shù)顯然為<code>Y = X q = q S_m</code>)齿兔。
到這里橱脸,我們先來看一下對最終的排序來說础米,這樣的模型和最一開始的模型到底有什么不同。
最根本的不同添诉,就在于原來排序的指標是q N屁桑,而現(xiàn)在則變?yōu)榱藂 S_m。
而栏赴,如果排序是根據(jù)當前值(第n代就是q S_n)來做排序的判斷蘑斧,那么可以看到,由于傳播的動態(tài)性须眷,這樣的排序會是很有意思的竖瘾。
我們這里主要感興趣的,是初試y操作數(shù)量N_0花颗、相連幾率p和x操作轉(zhuǎn)化為y操作的幾率q對于最后的穩(wěn)定值q S_m的影響以及對整個序列q S_n的影響是怎么樣的捕传。
由于這里所做的近似都是在N足夠大、p足夠小這個前提下的(這也就是說扩劝,當S_n接近N時上述近似其實已經(jīng)失效了庸论,也所以截斷方程其實是需要通過實驗來擬合出合適的B才能正常使用的而不能通過理論分析獲得),所以在這個前提下我們可以得到如下近似結(jié)果:
<pre>
M = p q N - 1
S_n = [M + tanh(C n + A)] / (p q)
N_n = [tanh(C n + A) - tanh(C n + A - C)] / (p q)
A = N_0 / N / (1 - M) - arctanh(M)
C = p q N_0 / (1 - M)
N_1 = p q N N_0
So:
m = {arccosh{sqrt[N_0 / B / (1 - M)]} + arctanh(M)} (1 - M) / (p q N_0) - 1 / (p q N)
C m + A = arccosh{sqrt[N_0 / B / (1 - M)]}
S_m = N - {1 - sqrt[1 - (2 - p q N) B / N_0]} / (p q)
</pre>
從而可以看出今野,N_0基本上決定了函數(shù)的上升速度葡公,p q雖然也能起到類似的作用,但并不是簡單的線性關(guān)系(<code>p q / (2 - p q N)</code>)条霜。
而最有趣的部分則在于最終的穩(wěn)定值S_m上:初試值N_0約小催什,則最終穩(wěn)定值S_m也約小宰睡;而和傳播相關(guān)的屬性pq則在某個特定值前越小蒲凶,最終穩(wěn)定值S_m也約小,特定值之后越大則S_m越小拆内,但這個特定值本身卻不小旋圆,從而打破了p為小值的前提。
現(xiàn)在麸恍,如果我們要排序的話灵巧,其實更好的預(yù)測值應(yīng)該是<code>q S_m = q N - {1 - sqrt[1 - (2 - p q N) B / N_0]} / p</code>。
不得不說的是抹沪,這是利用N足夠大和pq足夠小這兩個前提構(gòu)造出的近似分析刻肄,尤其在截斷發(fā)生的部分,這種近似本身就值得商榷融欧,所以只是一種定性分析的手段而已敏弃。
上面是通過模型,正向推倒出我們可觀測的現(xiàn)象噪馏,也就是每一段時間x操作和y操作數(shù)的變化情況麦到。
在實際使用的時候绿饵,我們往往需要用到的是反向的問題——如何通過x操作和y操作的數(shù)據(jù)列,來反推出模型種的那些參數(shù)瓶颠?
也就是拟赊,如果我們知道的是N和N_n(代表了x操作數(shù)),以及y操作數(shù)Y_n步清,如何求出最重要的參數(shù)p和q要门?
q的獲得相對來說很容易<code>q = Y_n / N_n</code>虏肾。p的獲得也還可以:
<pre>
p = 1 - [1 - N_{n+1} / (N - S_n)] ^ [1 / q / N_n]
</pre>
但廓啊,這都是理論上的情況,實際上我們所獲得數(shù)據(jù)都不可能是正好的理論值封豪,都有誤差谴轮,于是下面就要看誤差會導(dǎo)致怎么樣的改變。
先將上述運動方程用更好的方式來重寫一下:
<pre>
第n代的x操作數(shù)為X_n吹埠,y操作數(shù)為Y_n第步,x操作總數(shù)為R_n,y操作總數(shù)為T_n缘琅。
R_n = sum{X_i, i = 0 ~ n}
T_n = sum{Y_i, i = 0 ~ n}
Y_n = q X_n
X_{n + 1} = [1 - (1 - p) ^ Y_n] (N - R_n)
</pre>
在這樣的情況下粘都,如果在某一代n上,X_n和上述計算獲得的值(<code>|X|_n</code>)相比有一個dX_n的偏差刷袍,那么我們就要來看一下這個偏差在下一代數(shù)據(jù)上會導(dǎo)致什么樣的偏離:
<pre>
X_n = |X|_n + dX_n
Y_n = q |X|_n + qdX_n + dY_n
R_n = |R|n + dX_n
T_n = |T|n + qX_n + dY_n
X{n + 1} = |X|{n+1}
- {1 - (1 - p) ^ Y_n [1 - q ln(1 - p) (N - R_n)]} dX_n
- (1 - p) ^ Y_n ln(1 - p) (N - R_n) dY_n
</pre>
在p和q很小的極限下翩隧,上述結(jié)果則可以寫為:
<pre>
X_{n + 1} = |X|_{n+1}
-p [Y_n - q (1 - p Y_n) (N- R_n)] dX_n
+ p (1 - p Y_n) (N - R_n) dY_n
</pre>
這個數(shù)據(jù)有點意思。
可以看到呻纹,由于n代的Y_n的擾動dY_n引起的n+1代的的擾動的系數(shù)堆生,是恒正的,但對于X_n的擾動dX_n來說則不一定雷酪。
更重要的是淑仆,這個數(shù)據(jù)幾乎不出意外地是在不斷減小的——因為Y_n即便某一次會增大,但其作為一個小于一的數(shù)的冪次哥力,產(chǎn)生的影響幾乎不能和N - R_n相比蔗怠,而這個是隨著n的增加恒減小的。
同時吩跋,在早期寞射,從上述分析可以看到,dY_n引起的擾動的比例系數(shù)近似等于p N钞澳,而這個值則近似等于一個節(jié)點的“鄰點”個數(shù)怠惶,從而基本是一個大于1的值——因此,這就表示早期擾動對數(shù)據(jù)的影響是逐漸放大的轧粟,會極大地影響到X_n的生成策治。
而隨著R_n的積累脓魏,這種偏差也會被極快地消除——事實上,當Y_n達到一個極大值后開始減小后通惫,Y_n的干擾基本就會自我消除——從前面獲得近似解析解可以看到茂翔,系數(shù)A中由于存在1 - p q (N - N_0),從而在很大程度上A是負值履腋,這就表示sech(C n + A)會是一個先升后降的函數(shù)珊燎,從而N_n也將在很大程度上是這種函數(shù),而這樣的函數(shù)在升到最頂端的時候遵湖,其實N - R_n便已經(jīng)積累到接近一半的值了悔政,而Y_n又是最大,從而此時dY_n的影響因子已經(jīng)變得足夠小了延旧。
所以谋国,總結(jié)來說,早期dY_n的影響對整個系統(tǒng)是最大的迁沫,此后影響越來越小芦瘾。而當Y_n開始下降后,dY_n的影響基本可以不做考慮集畅。
從而近弟,對Y_n來說,早期數(shù)據(jù)由于擾動過大從而不宜做太多的考慮挺智,后期的Y_n的數(shù)據(jù)則比較可信祷愉。
而對于X_n的擾動來說,情況則更微妙——
存在一個臨界條件Y_n < q (N - R_n)逃贝,當條件滿足時谣辞,dX_n最終對X_{n+1}的影響是正反饋,而當這個條件被破壞時沐扳,則變成了負反饋——即使擾動會自己消減泥从。
可以看到,dY_n的影響始終是累計的沪摄,只不過影響因子在不斷減星怠(后期),而dX_n的不單單會累計杨拐,還會彼此抵消祈餐。
綜合這兩項分析可知,當Y_n序列(也即X_n)序列達到最大值的時候開始哄陶,是最統(tǒng)計的最佳階段帆阳。在此之前的數(shù)據(jù)誤差起到的作用都會比此后要大。
具體到實際操作中屋吨,也就是如果我們獲得了文章的點擊數(shù)序列X_n和點贊數(shù)序列Y_n蜒谤,那么前一段時間的數(shù)據(jù)可以不計如統(tǒng)計山宾,而從X_n開始下降的時刻開始統(tǒng)計。
不過必須要提醒的是鳍徽,這么做的一個前提资锰,就是假定只有一篇文章,且模型別的方面不出現(xiàn)別的擾動(比如肯定會有的p和q的擾動阶祭,以及系統(tǒng)并不能使用平均場假設(shè)這一根本性差異)绷杜。
當然,有趣的事情到這里還沒有結(jié)束濒募。
我們接下來開始引入“相互作用”的環(huán)節(jié)鞭盟。