陳錦繁,秦斌,劉佳敏
(深圳大學信息中心,深圳 518060)
隨著信息技術(shù)的普及推廣,生活中各種“互聯(lián)網(wǎng)+”應用層出不窮,通過手機或電腦輕松點外賣、打車或買菜,已深入人心。投票系統(tǒng)大概是互聯(lián)網(wǎng)應用最早的成功范例之一,利用在線網(wǎng)絡和移動互聯(lián)網(wǎng)的優(yōu)勢,既提高投票便利性,也能保證投票私密性。最重要的是,在線投票解決了線下手工計票的冗長繁瑣,高效可靠的算法還能保證投票結(jié)果的準確度和可信度。因此,計票和計分算法的優(yōu)劣將決定投票系統(tǒng)的成敗。
自2015年起,深圳大學正式上線了“校內(nèi)服務單位滿意度網(wǎng)上測評系統(tǒng)”(以下簡稱深大測評系統(tǒng)),每年組織一次全校師生員工網(wǎng)上測評,對全校所有管理部門、教輔部門和服務單位的服務滿意度進行投票。參與被投票的測評單位約50個,測評評價分非常滿意(100分)、滿意(80分)、基本滿意(60分)、不滿意(50分)和不了解(不計分)等5個計分級別。投票人按教師、本科生、研究生、非學歷教育學生、畢業(yè)校友和校企員工等分成不同類別,根據(jù)測評單位服務內(nèi)容和服務對象不同,每個投票用戶類別給每個測評單位的計票權(quán)重也不一樣。
由于各測評單位和投票用戶類別的權(quán)重可能會隨時調(diào)整,個別投票用戶類別甚至取消權(quán)重即投票計無效,因此在投票活動截止日停止投票后,統(tǒng)一進行計票運算。根據(jù)各單位收獲的評價票數(shù)和投票人權(quán)重,再通過加權(quán)計分即排名規(guī)則核算得分,得到服務滿意度的年度排名。
根據(jù)歷年的投票情況,教師、本科生和研究生等3類用戶的投票占了絕大多數(shù)。因此,為了方便闡述計票和計分流程,本文中涉及到的計票規(guī)則和計分規(guī)則兩個環(huán)節(jié)的算法都忽略了非在校師生因素,只保留教師、本科生和研究生3個在校師生類別。以圖書館和離退辦為例,圖書館服務對象囊括全校師生和校外讀者,各類人員都有評價權(quán),考慮到學校本科生數(shù)量較多,因此教師、本科生和研究生權(quán)重比定為3:4:3;離退辦的服務對象以臨近離退和已離退教師為主,工作內(nèi)容和學生關(guān)系不大,因此服務對象只有教師。
按照傳統(tǒng)的用戶依次計票累計辦法,公式(1)為各測評單位得票數(shù)規(guī)則示意。Pn(n=1~4即含P1、P2、P3、P4)分別是非常滿意、滿意、基本滿意和不滿意等4個評價得票數(shù),而“不了解”票計無效,不參與計票和計分;Wi是被測評單位對應第i個用戶的權(quán)重,根據(jù)用戶類別不同,分別為Wt教師權(quán)重、Ws本科生權(quán)重和Wy研究生權(quán)重;Pn i(n=1~4)是第i個用戶選擇的評價票。2020年度剛剛結(jié)束的測評活動中,合計約2萬在校師生參與了投票,每用戶分別投給50家被測評單位,則實際需統(tǒng)計的加權(quán)票數(shù)100萬張。通過投票人和被測評單位的雙循環(huán),很容易實現(xiàn)票數(shù)統(tǒng)計,流程圖如圖1左側(cè)一人一票模式(簡稱A模式)。
圖1 一人一票A模式和按用戶類別B模式計票流程對比圖
一人一票模式優(yōu)點是運算邏輯清晰,在即投即計的網(wǎng)上投票系統(tǒng)中是最常用的。深大測評系統(tǒng)不是即投即計,而且投票計票數(shù)據(jù)量較大。因此,這種計票模式應用到本案例中,虛線框內(nèi)流程循環(huán)頻次達100萬次,勢必嚴重消耗系統(tǒng)資源,完成計票統(tǒng)計的時間漫長。
深大測評系統(tǒng)在實際應用中是投票截止后統(tǒng)一進行計票計分,因此一人一票模式并非必要。投票人分為教職工、本科生、研究生等3個不同權(quán)重的投票用戶類別,改進的思路是按照用戶類別預先統(tǒng)計各被測評單位票數(shù),依次計入被測評單位。
公式(2)為改進后計票算法規(guī)則。Pn(n=1~4即含P1、P2、P3、P4)分別是非常滿意、滿意、基本滿意和不滿意等4個評價得票數(shù);W t、W s、W y分別為教師權(quán)重、本科生權(quán)重和研究生權(quán)重;Pt n、Ps n、P y n分別為4個評價的教師總票數(shù)、本科生總票數(shù)和研究生總票數(shù)。公式(2)的流程如圖1的按用戶類別模式(簡稱B模式)所示。票池數(shù)據(jù)先進行按用戶類別的小計匯總,增加了“將人轉(zhuǎn)化為類別”的運算步驟,即使再增加量級如10萬甚至100萬的票數(shù),這個數(shù)據(jù)整理初始化的運算時間也是極少的,更加凸顯改進效果。表1為圖書館和離退辦的按用戶類別統(tǒng)計的原始票數(shù)據(jù)。
表1 圖書館和離退辦原始投票統(tǒng)計表
優(yōu)化后的結(jié)果,從圖1的虛線框內(nèi)B模式雙循環(huán)中的唱票計票運算頻次為150次,相比A模式循環(huán)頻次降幅超99.98%,大大節(jié)約了運算耗時。在一臺普通終端電腦上運行測評系統(tǒng)計票環(huán)節(jié)程序,對優(yōu)化前后的計票進行粗略計時:A模式27秒,B模式快于1秒(約0.8秒)。對比見圖2所示。
圖2 計票環(huán)節(jié)優(yōu)化前后運算時長對比圖
在計票過程中完成“唱票”,各被測評單位均得到非常滿意、滿意、基本滿意和不滿意等4個級別評價票數(shù)(如表1所示),接下來就是計分排名算法問題,深大測評系統(tǒng)的計分要求跟電影點評網(wǎng)類似。電影愛好者喜歡訪問的電影點評網(wǎng)有IMDb(internet movie database)、爛番茄(rotten tomatoes)、豆瓣電影(douban)等,他們都提供用戶投票打分排名功能。國內(nèi)的豆瓣電影網(wǎng)常被影迷們津津樂道,具有相當?shù)闹?。根?jù)網(wǎng)上可查詢到的數(shù)據(jù),豆瓣電影評分規(guī)則采用了常見的加權(quán)百分比算法,規(guī)則簡單明了。
D1、D2、D3、D4、D5分別是對應1星、2星、3星、4星、5星的分值;P1、P2、P3、P4、P5分別是上述5個星值的投票數(shù)。豆瓣電影被譽為國內(nèi)最大的青年影迷聚集地,擁有龐大用戶群,評分規(guī)則真實反映每一位打分影迷的喜好。深大測評系統(tǒng)第一年上線時同樣采用了類似的加權(quán)百分比算法,計分基本規(guī)則如公式(4)。
S1、S2、S3、S4對應非常滿意、滿意、基本滿意和不滿意等4個評價等級權(quán)重分數(shù)(不了解票計無效,不參與評分),分別是100分、80分、60分和50分;P1、P2、P3、P4分別是上述4個評價票數(shù),即公式(1)、(2)被測評單位加權(quán)票數(shù)Pn。加權(quán)百分比算法邏輯清晰,得分運算也非常高效,但是這樣的得分排名是否真實反映各測評單位的優(yōu)劣呢?!
由于各測評單位的服務受眾不盡相同,比如圖書館服務對象涵蓋全校師生,離退辦的服務對象則較窄,前者投票人數(shù)必然遠遠超過后者。2020年圖書館投票數(shù)約2萬票,去除“不了解”票后得有效評價票Ptsy為14979張;離退辦原始票Ptsy為447張,但根據(jù)師生權(quán)重只計教師票實則為148張,約占圖書館票數(shù)1%。圖書館按公式(4)加權(quán)百分比得分87.2,離退辦按公式(4)算得88.2分。離退辦評價票偏少,加大了偶然因素影響。對于圖書館而言,服務滿意的師生可能投票參與度不高,但服務受眾廣難免百密一疏,不滿意票自然少不了,因此“有功勞也有苦勞”的圖書館得分Q的排名似乎有點欠說服力。
表2 圖書館和離退辦加權(quán)票和加權(quán)百分比得分表
電影評分也是同樣道理:一部熱門商業(yè)大片有超十萬影迷投票,而一部小眾影片可能獲得區(qū)區(qū)幾百投票。為了更準確衡量熱門冷門影片的好壞,最理想的辦法是讓同樣數(shù)量影迷觀影并打分,但現(xiàn)實中這是無法做到的。因此,從計分算法入手,能否設法為冷門影片合理增加一些票數(shù)呢?貝葉斯算法可以提供一些思路。貝葉斯算法的推導始于條件概率:在事件B發(fā)生的前提下事件A發(fā)生的概率,數(shù)學上用P(A|B)來表示。
P(A)稱為事件A的先驗概率;P(B)稱為事件B的先驗概率;P(B|A)是事件A發(fā)生后事件B的觀測樣本統(tǒng)計概率,也稱為似然性概率;P(A|B)就是我們想要的事件A條件概率,也稱后驗概率;公式中的P(B|A)/P(B)可看成一個整體,稱為可能性函數(shù),這是一個調(diào)整因子,使得預估概率更接近真實概率。通俗地說,貝葉斯公式是根據(jù)已有經(jīng)驗和知識先得到先驗概率,然后在觀測樣本和數(shù)據(jù)不斷積累的情況下調(diào)整這個概率,最終得到最科學最精準的事件發(fā)生概率。全球最知名的電影點評網(wǎng)莫過于IMDb,基于龐大的用戶群和投票數(shù),它的排名得到業(yè)界的公認,投票計分規(guī)則來源于貝葉斯算法。
IMDb評分算法規(guī)則見公式(6)。R是用普通的方法計算出的平均分;v是投票人數(shù);m是進入IMDb排名前250需要的最小票數(shù);C是目前所有電影的平均得分。IMDb考慮了所有可能影響的因子、基于普通方法計算出來的平均分、投票人數(shù)和目前所有電影的平均分。算法的關(guān)鍵點就是m,人為地給冷門影片增加基礎票數(shù),避免了過熱和過冷問題。借鑒IMDb評分方法,深大測評系統(tǒng)也引入最小票數(shù)概念,為各測評單位均增加一個基礎票數(shù),避免冷票倉單位出現(xiàn)“幾張滿意票就插隊領先”或“幾張不滿意票就拖后腿”的現(xiàn)象。
Q是按公式(4)加權(quán)百分比算法得分;P1、P2、P3、P4是公式(4)各評價等級票數(shù);m是基礎票數(shù),按總投票數(shù)1%;C是所有單位得分Q的平均值。因此,深大測評系統(tǒng)采用了以公式(4)為評分基準、公式(7)為評分修正的計分規(guī)則。歸根結(jié)底,此計分規(guī)則同樣引入了貝葉斯推斷思想,在不知道結(jié)果之前,先預設一個值,通過越來越多的數(shù)據(jù)加以修正,目的仍是最大程度反映廣大師生意志,得到最真實的投票結(jié)果。
2020年度50個被測評單位,師生總投票數(shù)20000,則基礎票數(shù)m值為200;加權(quán)百分比評分Q后得到C值為85。如圖3所示,左側(cè)為全體50個測評單位的得分分布圖,其中Q曲線為加權(quán)百分比得分分布近似曲線,分布于70~95區(qū)間;S曲線為引入基礎票數(shù)m的得分分布,位于76~94區(qū)間;曲線下方50個色塊分別對應50個測評單位在各得分區(qū)的分布情況;m取值200讓S曲線基本接近正態(tài)分布理想狀態(tài),一定程度上降低了冷門單位少數(shù)票的拉分效果,盡可能實現(xiàn)了服務數(shù)量和質(zhì)量的真實排名體現(xiàn)。按照改進后的算法,因圖書館票數(shù)多受基礎票數(shù)m影響較小,最終得分仍為87.2;離退辦“拉分效果”被弱化,最終得分86.4,因此圖書館排名在離退辦前頭(見表3)。
圖3 全體測評單位得分S分布圖
表3 2020年測評單位排名統(tǒng)計表(部分)
深大測評系統(tǒng)使用的數(shù)據(jù)庫是SQL server 2008R2,具執(zhí)行大規(guī)模在線事務處理能力,是一個全面的數(shù)據(jù)管理和業(yè)務智能平臺,為關(guān)鍵業(yè)務應用提供可擴展性、數(shù)據(jù)倉庫、安全、高級分析和報表支持。優(yōu)化運行環(huán)境,還可以從數(shù)據(jù)庫入手,考慮使用視圖和存儲過程。視圖可以通過抽取不同數(shù)據(jù)表的數(shù)據(jù)項生成,具有邏輯數(shù)據(jù)獨立性的特點。從視圖的特點和技術(shù)上說,對性能貌似并無提升,但從系統(tǒng)優(yōu)化的角度,可以有效精簡數(shù)據(jù)操作語句,同時保護數(shù)據(jù)表的直接讀寫,視圖是有意義的。另外,SQL server的存儲過程是一個預編譯過程,把測評系統(tǒng)計票和計分環(huán)節(jié)中的數(shù)據(jù)處理語句寫入存儲過程,數(shù)據(jù)庫不必每次執(zhí)行它時都要分析和編譯它,避免了處理語句在網(wǎng)絡中傳輸然后再解釋的低效率問題。
本文是應用程序開發(fā)過程中的改進優(yōu)化的有益實踐:計票環(huán)節(jié)著重提升運算效率和性能,計分環(huán)節(jié)追求公平合理最大化。深大測評系統(tǒng)采用貝葉斯平均算法思路弱化極端投票影響,其他計票策略還有很多:比如非師生權(quán)重因素、本單位人員不能給本測評單位投票、單點異常投票、惡意投票告警、智能識別拉票等約束和控制功能。上述因素本文未提及,各種策略在以后運行中會根據(jù)實際需求和變化進行不斷調(diào)整調(diào)優(yōu)。深圳大學校內(nèi)單位服務滿意度網(wǎng)上測評系統(tǒng)已運行6年,以科學精準、客觀真實的測評數(shù)據(jù)為提升校內(nèi)服務水平和學校信息化應用建設貢獻了一份力量。