s0演算法
① 關於熱度演算法
熱度演算法基本原理
需要了解的是,熱度演算法也是需要不斷優化去完善的,基本原理:
新聞熱度分 = 初始熱度分 + 用戶交互產生的熱度分 – 隨時間衰減的熱度分
Score = S0 + S(Users) – S(Time)
新聞入庫後,系統為之賦予一個初始熱度值,該新聞就進入了推薦列表進行排序;隨著新聞不斷被用戶點擊閱讀,收藏,分享等,這些用戶行為被視作幫助新聞提升熱度,系統需要為每一種新聞賦予熱度值;同時,新聞是有較強時效性的內容,因此新聞發布之後,熱度必須隨著新聞變得陳舊而衰減。
新聞的熱度就在這些演算法的綜合作用下不斷變化,推薦列表的排序也就不斷變化。
初始熱度不應該一致
上面的演算法為每一條入庫的新聞賦予了同樣的熱度值,但在現實使用後發現行不通,例如娛樂類別比文化類別受歡迎程度本身就高很多;或者突發了嚴重的災害或事故;或是奧運會期間,體育類別的關注度突然高了起來;而此時如果還是每條新聞給同樣的熱度就不能貼合實際了。
解決辦法就是把初始熱度設置為變數:
(1)按照新聞類別給予新聞不同的初始熱度,讓用戶關注度高的類別獲得更高的初始熱度分,從而獲得更多的曝光,例如:
(2)對於重大事件的報道,如何讓它入庫時就有更高的熱度,我們採用的是熱詞匹配的方式。
即對大型新聞站點的頭條,Twitter熱點,競品的頭條做監控和扒取,並將這批新聞的關鍵詞維護到熱詞庫並保持更新;每條新聞入庫的時候,讓新聞的關鍵詞去匹配熱詞庫,匹配度越高,就有越高的初始熱度分。
這樣處理後,重大事件發生時,Twitter和門戶網站的爭相報道會導致熱詞集中化,所有匹配到這些熱詞的新聞,即報道同樣事件的新聞,會獲得很高的初始熱度分。
用戶行為分規則不是固定不變的
解決了新聞入庫的初始分之後,接下來是新聞熱度分的變化。先要明確用戶的的哪些行為會提高新聞的熱度值,然後對這些行為賦予一定的得分規則。例如對於單條新聞,用戶可以點擊閱讀(click),收藏(favor),分享(share),評論(comment)這四種行為,我們為不同的行為賦予分數,就能得到新聞的實時用戶行為分為:
S(Users) = 1*click + 5*favor + 10*comment + 20*share
這里對不同行為賦予的分數為1,5,10,20,但這個值不能是一成不變的;當用戶規模小的時候,各項事件都小,此時需要提高每個事件的行為分來提升用戶行為的影響力;當用戶規模變大時,行為分也應該慢慢降低,因此做內容運營時,應該對行為分不斷調整。
當然也有偷懶的辦法,那就是把用戶規模考慮進去,算固定用戶數的行為分,即:
S(Users) = (1*click + 5*favor + 10*comment + 20*share)/DAU * N(固定數)
這樣就保證了在不同用戶規模下,用戶行為產生的行為分基本穩定。
熱度隨時間的衰減不是線性的
由於新聞的強時效性,已經發布的新聞的熱度值必須隨著時間流逝而衰減,並且趨勢應該是衰減越來越快,直至趨近於零熱度。換句話說,如果一條新聞要一直處於很靠前的位置,隨著時間的推移它必須要有越來越多的用戶來維持。
我們要求推薦給用戶的新聞必須是24h以內,所以理論上講,衰減演算法必須保證在24h後新聞的熱度一定會衰減到很低,如果是線性衰減,當某些新聞突然有大量用戶閱讀,獲得很高的熱度分時,可能會持續排名靠前很久,讓用戶覺得內容更新過慢。
參考牛頓冷卻定律,時間衰減因子應該是一個類似於指數函數:
T(Time) = e ^ (k*(T1 – T0))
其中T0是新聞發布時間,T1是當前時間。
而由於熱度的發展最終是一個無限趨近於零熱度的結果,最終的新聞的熱度演算法也調整為:
Score = ( S0(Type) + S(Users) ) / T(Time)
其他影響因素
很多新聞產品會給用戶「贊」,「踩」或「不在推薦此類」的選項,這些功能不僅適用於個性化推薦,對熱度演算法也有一定的作用。
新聞的推送會造成大量的打開,在計算熱度的時候需要排除掉相關的影響。類似於這樣的因素,都會對熱度演算法產生影響,因此熱度演算法上線後,依然需要不斷地「調教」。建議把所有的調整指標做成可配項,例如初始熱度分,行為事件分,衰減因子等,從而讓產品和運營能實時調整和驗證效果,達到最佳狀態。
② 數學建模常用演算法——傳染病模型(三)SIR模型
常見的傳染病模型按照具體的傳染病的特點可分為SI、SIS、SIR、SIRS、SEIR模型。其中「S」「E」「I」「R」的現實含義如下:
「S」代表易感者,指的是缺乏免疫能力的健康人,與感染者接觸後容易受到感染;
「E」代表暴露者,指接觸過感染者但暫無傳染性的人,適用於存在潛伏期的傳染病;
「I」代表患病者,指有傳染性的病人,可以傳播給S,將其變為E或I;
「R」代表康復者,指病癒後具有免疫力的人,對於終身免疫性傳染病,康復者不可被重新變為S、E或I;在免疫期有限的傳染病中,康復者可能重新變為S類,從而再次被感染。
SIR模型適用於有易感者、患病者和康復者三類人群的傳染病,如水痘,康復者具有很強的免疫力,不會再次感染。對於致死性傳染病,死亡的病人也可以歸類為康復者,理解為退出了傳染系統。
模型假設如下:
- 易感者與患病者有效接觸即被感染,變為患病者,可以被治癒變為康復者,無潛伏期,有終身免疫力。
- 以一天作為模型的最小時間單位。
- 總人數為N,不考慮人口的出生與死亡、遷入與遷出,此總人數不變。
- t時刻各類人群占總人數的比率分別記為s(t)、i(t)、r(t),各類人群的數量為S(t)、I(t)、R(t)。
- 初始時刻t=0時,各類人數量所佔初始比率為s0、i0、r0。
- 日接觸數λ,即每個患病者每天有效接觸的易感者的平均人數。
- 日治癒率μ,即每天被治癒的患病者人數占病人總數的比率。
- 平均治癒天數為1/μ,即從患病到治癒的天數。
- 傳染期接觸數σ=λ/μ,即每個患病者在整個傳染期1/μ天內,有效接觸的易感者人數。
- 根據模型假設:
每個病人每天可使λ*s(t)個易感者變為患病者,患病者人數為N*i(t),所以每天有λ*s(t)*N*i(t)個易感者被感染,即每天新增的患病者數。每天的患病人數N*i(t)中,又有μ*N*i(t)被治癒成為康復者。
由此可以得到微分方程:
N*ds(t)/dt=-λ*s(t)*N*i(t)
N*di(t)/dt=λ*s(t)*N*i(t)-μ*N*i(t)
N*dr(t)/dt=μ*N*i(t)
簡化後得:
ds(t)/dt=-λ*s(t)*i(t)
di(t)/dt=λ*s(t)*i(t)-μ*i(t)
dr(t)/dt=μ*i(t)
s(0)=s0
i(0)=i0
r(0)=0
因為s(t)+i(t)+r(t)=1,且觀察上式可得:
dr(t)/dt=-(ds(t)/dt+di(t)/dt)
去除恆等式dr(t)/dt=-(ds(t)/dt+di(t)/dt)=μ*i(t),模型簡化為:
ds(t)/dt=-λ*s(t)*i(t)
di(t)/dt=λ*s(t)*i(t)-μ*i(t)
s(0)=s0
i(0)=i0
此模型無解析解,給定λ、μ、s0、i0可求數值解。
隨著時間推移,易感者數s(t)開始單調遞減,患病者數比率i(t)先達到峰值,隨後一直回落,直到減為零,康復者數單調遞增。
若σ>1,則最終全部為康復者。
若σ≤1,則會剩餘一部分易感者,而疾病波及到的總人數為t趨於無窮大時的康復者人數R(t)。