關(guān)鍵詞: 基于用戶的協(xié)同過濾;基于項(xiàng)目的協(xié)同過濾;旅游推薦服務(wù);爬蟲;旅游推薦系統(tǒng)
0 引言
隨著“互聯(lián)網(wǎng)+”的快速發(fā)展,旅游行業(yè)的互聯(lián)網(wǎng)化已經(jīng)成為一種不可忽略的趨勢(shì)。伴隨著消費(fèi)水平的上升,旅游市場(chǎng)亦在持續(xù)擴(kuò)展,旅游數(shù)據(jù)也在不斷增加,同時(shí)旅游產(chǎn)品的種類和數(shù)量也在快速增加。這給用戶在選擇旅游目的地、產(chǎn)品和服務(wù)時(shí)帶來了巨大的挑戰(zhàn)。對(duì)于旅游服務(wù)提供商而言,如何利用人工智能推薦算法結(jié)合大數(shù)據(jù),為用戶提供個(gè)性化、高效的旅游推薦服務(wù),以吸引更多用戶并提高用戶留存率和轉(zhuǎn)化率[1],是提升競(jìng)爭(zhēng)力的關(guān)鍵。
1 基于大數(shù)據(jù)的旅游推薦系統(tǒng)
基于大數(shù)據(jù)的旅游推薦系統(tǒng)是一個(gè)復(fù)雜的系統(tǒng),涵蓋了多個(gè)方面。該系統(tǒng)需要收集、處理和分析大量的旅游景點(diǎn)和用戶數(shù)據(jù),以提供有效的信息和決策支持。其主要任務(wù)和功能包括:
1) 利用網(wǎng)絡(luò)爬蟲技術(shù)收集數(shù)據(jù)。從互聯(lián)網(wǎng)上大規(guī)模爬取和篩選旅游景點(diǎn)信息,然后進(jìn)行清洗和標(biāo)準(zhǔn)化處理。這一步驟確保了數(shù)據(jù)的質(zhì)量和一致性,為后續(xù)分析和推薦的準(zhǔn)確性奠定基礎(chǔ)。
2) 用戶個(gè)性化推薦。根據(jù)用戶的興趣及使用情況,采用推薦算法,為用戶提供最適合其需求的旅游服務(wù),從而提升服務(wù)的精確度和用戶滿意度。
3) 數(shù)據(jù)的可視化與分析。利用數(shù)據(jù)可視化技術(shù),將豐富的信息轉(zhuǎn)化為圖表與圖像,幫助用戶更好地了解當(dāng)前市場(chǎng)趨勢(shì)、旅游景點(diǎn)的熱度和價(jià)格。見圖1。
通過這樣的系統(tǒng)架構(gòu),旅游推薦服務(wù)能夠更加智能化和高效地滿足用戶的需求,同時(shí)也為旅游服務(wù)提供商帶來了更多的客戶和業(yè)務(wù)增長(zhǎng)。
2 數(shù)據(jù)爬取與清洗
2.1 數(shù)據(jù)爬取
使用WebMagic爬蟲從互聯(lián)網(wǎng)上爬取景點(diǎn)信息記錄,通過爬蟲工具從各旅游網(wǎng)站收集景點(diǎn)信息數(shù)據(jù)。這些數(shù)據(jù)包括景點(diǎn)名稱、等級(jí)、地址、介紹、熱度、價(jià)格、月銷量、經(jīng)緯度、景點(diǎn)圖片、省份、城市、行政區(qū)等詳細(xì)信息。通過預(yù)處理和清洗操作,對(duì)收集的數(shù)據(jù)進(jìn)行整理,形成一個(gè)全面的旅游大數(shù)據(jù)庫。
爬蟲流程如下:1) 使用requests 庫發(fā)送HTTP 請(qǐng)求。2) 獲取數(shù)據(jù),服務(wù)器響應(yīng)后,保存整個(gè)頁面信息。3) 解析HTML頁面,查找并提取所需數(shù)據(jù)。4) 存儲(chǔ)數(shù)據(jù),將獲取的數(shù)據(jù)保存到文件中。
2.2 數(shù)據(jù)清洗
數(shù)據(jù)清洗的主要工作包括:1) 數(shù)據(jù)清理。刪除無關(guān)數(shù)據(jù)或錯(cuò)誤數(shù)據(jù),處理缺失值。2) 數(shù)據(jù)轉(zhuǎn)換。將數(shù)據(jù)轉(zhuǎn)換為適合計(jì)算和分析的格式或形式。3) 特征提取。將數(shù)據(jù)轉(zhuǎn)化為適用的向量等。
為了確保結(jié)果的準(zhǔn)確性和可靠性,所收集的數(shù)據(jù)必須經(jīng)過數(shù)據(jù)清理和標(biāo)準(zhǔn)化處理,以確保數(shù)據(jù)的完整性和一致性。具體工作流程包括:1) 讀取數(shù)據(jù)。2) 查找缺失值。3) 刪除缺失值很多的數(shù)據(jù)。4) 填補(bǔ)缺失值。5) 檢驗(yàn)和更正錯(cuò)誤數(shù)據(jù)。6) 刪除重復(fù)數(shù)據(jù)。7) 保存數(shù)據(jù)。
對(duì)旅游景點(diǎn)的指標(biāo)數(shù)據(jù)進(jìn)行篩選,過濾掉不符合數(shù)值規(guī)范的數(shù)據(jù)。主要流程如下:
1) 設(shè)置指標(biāo)范圍字典。2) 遍歷每個(gè)旅游景點(diǎn)數(shù)據(jù),對(duì)每個(gè)景點(diǎn)信息遍歷每個(gè)指標(biāo)。3) 判斷數(shù)值是否符合規(guī)范,過濾不符合標(biāo)準(zhǔn)的數(shù)據(jù)。4) 將符合標(biāo)準(zhǔn)的數(shù)據(jù)加入過濾后的數(shù)據(jù)列表中。
清洗后的數(shù)據(jù)需要進(jìn)行標(biāo)準(zhǔn)化,目的是將不同尺度的數(shù)據(jù)縮放到同一維度。使用MinMaxScaler函數(shù)進(jìn)行數(shù)據(jù)縮放,將數(shù)據(jù)縮放到[0,1]的范圍內(nèi),這樣方便后續(xù)的加權(quán)計(jì)算和相似度計(jì)算。
3 推薦算法
3.1 基于用戶的協(xié)同推薦[2]
重點(diǎn)利用用戶的歷史行為數(shù)據(jù),通過尋找與用戶興趣相似的其他用戶的行為來生成推薦。這種方法的核心思想是“人以群分”,即認(rèn)為具有相似興趣的用戶會(huì)喜歡相似的物品。因此,它傾向于推薦那些與用戶歷史行為相似的其他用戶喜歡的物品。這種推薦方法的好處是可以充分利用用戶的歷史行為數(shù)據(jù),為用戶提供個(gè)性化的推薦,而且對(duì)于新物品也有一定的推薦能力。然而,它也存在一些問題,比如可能會(huì)受到數(shù)據(jù)稀疏性和冷啟動(dòng)問題的影響,即對(duì)于新用戶或者新物品,由于缺乏足夠的歷史行為數(shù)據(jù),很難進(jìn)行準(zhǔn)確的推薦。
具體過程:1) 初始化相關(guān)參數(shù),包括找到與目標(biāo)用戶興趣相似用戶數(shù)(self.n_sim_user) 和為其推薦的景點(diǎn)數(shù)(self.n_rec_movie) 。2) 讀入數(shù)據(jù)集文件并將其劃分為訓(xùn)練集和測(cè)試集。3) 計(jì)算用戶之間的相似度矩陣。首先,將數(shù)據(jù)集中的每個(gè)景點(diǎn)與看過該景點(diǎn)的用戶建立倒排索引表[3];然后,對(duì)于每一對(duì)用戶,計(jì)算它們?cè)诠餐^看景點(diǎn)的數(shù)量,進(jìn)而計(jì)算這些用戶之間的相似性;對(duì)于目標(biāo)用戶,可以根據(jù)上述方法找到最相似的K個(gè)用戶,并根據(jù)這些用戶對(duì)未觀看過的景點(diǎn)進(jìn)行推薦。最終,返回N個(gè)值得推薦的景點(diǎn)。
根據(jù)推薦結(jié)果對(duì)推薦效果進(jìn)行評(píng)價(jià),推薦系統(tǒng)的效果評(píng)價(jià)主要通過以下指標(biāo)進(jìn)行:1) 準(zhǔn)確率(Preci? sion) 。表示推薦的景點(diǎn)中有多少是用戶實(shí)際感興趣的景點(diǎn)。2) 召回率(Recall) 。表示用戶實(shí)際感興趣的景點(diǎn)中有多少被推薦出來。3) 覆蓋率(Coverage) 。表示推薦算法能夠覆蓋多少不同的景點(diǎn)。
這些指標(biāo)能夠全面反映推薦系統(tǒng)的性能和用戶滿意度,幫助持續(xù)優(yōu)化推薦模型,提升用戶體驗(yàn)。
3.2 基于物品的協(xié)同過濾推薦
基于物品的協(xié)同過濾推薦主要側(cè)重利用用戶的歷史行為數(shù)據(jù),通過計(jì)算物品之間的相似度來發(fā)現(xiàn)用戶的潛在興趣。它傾向于推薦與用戶之前喜歡過的相似物品,因此在推薦結(jié)果上可能具有較高的個(gè)性化和準(zhǔn)確性。然而,這種推薦方法可能存在一定的局限性,例如它可能會(huì)導(dǎo)致信息閉環(huán),即用戶只會(huì)接觸到與自己此前興趣相似的物品,缺乏多樣性。此外,對(duì)于新物品或者用戶行為數(shù)據(jù)稀疏的情況下,基于物品的協(xié)同過濾推薦的效果可能會(huì)受到影響。
基于物品的推薦算法通過計(jì)算景點(diǎn)之間的相似度,為目標(biāo)用戶推薦一些可能感興趣的景點(diǎn)。具體算法過程如下:
1) 初始化參數(shù)。包括要找到的相似景點(diǎn)數(shù)量和要推薦的景點(diǎn)數(shù)量等。2) get_dataset。從文件中讀取數(shù)據(jù)集,將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集。3) lcoaalcd__mfiloev。ie_讀sim取。文計(jì)件算景并點(diǎn)返之回間文的件相的似度每。一5)行 re。com4?) mend。為目標(biāo)用戶推薦景點(diǎn)。6) evaluate。根據(jù)準(zhǔn)確率、召回率和覆蓋率對(duì)推薦進(jìn)行評(píng)估。
其中,calc_movie_sim方法[4]是該算法的核心,它通過計(jì)算訓(xùn)練集中每一對(duì)景點(diǎn)之間的共同出現(xiàn)次數(shù),使用余弦相似度得到景點(diǎn)之間的相似度。即,兩者之間的相似度等于它們共同被用戶評(píng)價(jià)的次數(shù)除以它們分別被評(píng)價(jià)次數(shù)的乘積。在相似度計(jì)算之前,該方法還計(jì)算了每個(gè)景點(diǎn)的受歡迎程度,以便在相似度計(jì)算中對(duì)景點(diǎn)的受歡迎程度進(jìn)行加權(quán)。
recommend方法則是用于為目標(biāo)用戶推薦景點(diǎn)的方法。它根據(jù)目標(biāo)用戶已經(jīng)看過的景點(diǎn),找到與這些景點(diǎn)相似的K個(gè)景點(diǎn),并從中選出評(píng)分最高的N個(gè)景點(diǎn)進(jìn)行推薦。
evaluate方法用于評(píng)估該算法的準(zhǔn)確率、召回率和覆蓋率[5]。
3.3 相似度計(jì)算與評(píng)分公式
推薦算法的核心在于相似度的計(jì)算。根據(jù)計(jì)算特征及數(shù)學(xué)原理,相似度計(jì)算方法大致分為兩類:一類是基于相似度指標(biāo),例如斯皮爾曼的相關(guān)性;另一類是基于距離指標(biāo),例如歐氏距離、曼哈頓距離等。斯皮爾曼的相關(guān)性見公式(1) 。
式中,x 和y 表示兩個(gè)向量,xi 和yi是向量x 和y 的分量,n是向量的維數(shù)。
余弦相似度既不屬于基于相似度指標(biāo)的方法,也不完全屬于基于距離指標(biāo)的方法。它通過測(cè)量?jī)蓚€(gè)向量的夾角的余弦值來評(píng)估它們之間的相似程度。余弦相似度的取值范圍為-1~1,數(shù)值越接近1表示兩個(gè)向量越相似,數(shù)值越接近-1表示兩個(gè)向量越不相似,數(shù)值接近0表示兩個(gè)向量之間沒有明顯的相似性。余弦相似度特別適用于處理高維數(shù)據(jù),因?yàn)樗鼘?duì)向量的長(zhǎng)度不敏感,只關(guān)注其方向。余弦相似度[6]的計(jì)算公式如下:
式中:x 和y 表示兩個(gè)向量,x·y 表示向量x 和向量y 的點(diǎn)積,||x||和||y||表示向量x 和向量y 的模長(zhǎng)。xi和yi為向量x 和y 的分量,n為向量的維數(shù)。
協(xié)同過濾的評(píng)分公式是基于用戶的歷史行為數(shù)據(jù)和其他用戶的行為數(shù)據(jù)來預(yù)測(cè)用戶對(duì)商品的評(píng)分。通過計(jì)算用戶之間或商品之間的相似度或相關(guān)系數(shù),可以找到與用戶興趣相似的其他用戶或商品,并利用這些相似用戶或商品的行為數(shù)據(jù)來預(yù)測(cè)目標(biāo)用戶對(duì)目標(biāo)商品的評(píng)分。這種方法可以幫助用戶發(fā)現(xiàn)他們可能感興趣的新商品或內(nèi)容。加權(quán)預(yù)測(cè)評(píng)分公式[7]見公式(3) 。
式中:n 為影響因素的數(shù)量, Wkb為b 項(xiàng)目在k 因素中的權(quán)重,rka是a 項(xiàng)目在第k個(gè)因素的值,rib是i 用戶對(duì)b 項(xiàng)目的評(píng)分。
4 實(shí)驗(yàn)結(jié)果對(duì)比分析
首先,將上述兩種算法:基于物品(ItemCF) 的推薦算法和基于用戶(UserCF) 的推薦算法,在公開的Mov? ielens 1M數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)驗(yàn)證。ml-1m是推薦領(lǐng)域常用的測(cè)試數(shù)據(jù)集,很多有效的研究成果都是基于該數(shù)據(jù)集進(jìn)行驗(yàn)證的。該數(shù)據(jù)集包含943 個(gè)用戶、1 682個(gè)項(xiàng)目和100 000條評(píng)分。下載后的數(shù)據(jù)分別是users.dat、movies.dat、ratings.dat,另外還需要links和tags文件。
實(shí)驗(yàn)結(jié)果統(tǒng)計(jì)表如表1所示:
根據(jù)實(shí)驗(yàn)結(jié)果,可以看到ItemCF和UserCF的P、R值。P代表Precision,即正確結(jié)果占所有預(yù)測(cè)結(jié)果的比例。在此結(jié)果中,ItemCF 的P 值為0.261 4,UserCF的P值為0.281 8。這意味著在所有預(yù)測(cè)項(xiàng)目中,ItemCF 和UserCF 正確預(yù)測(cè)的項(xiàng)目占比分別為26.14%和28.18%。R代表Recall,表示預(yù)測(cè)正確的項(xiàng)目占所有真實(shí)項(xiàng)目的比例。在此結(jié)果中,ItemCF的R 值為0.0705,UserCF的R值為0.075 8。這意味著在所有真實(shí)項(xiàng)目中,ItemCF和UserCF正確預(yù)測(cè)的項(xiàng)目占比分別為7.05%和7.58%。
從Precision(P) 和Recall(R) 指標(biāo)來看,UserCF 模型的性能略高于ItemCF模型。這意味著UserCF模型能夠更準(zhǔn)確地預(yù)測(cè)用戶會(huì)喜歡的物品,并且能夠更全面地推薦物品。然而,從Coverage指標(biāo)來看,ItemCF 模型的性能略高于UserCF模型。這意味著ItemCF模型能夠覆蓋更多的物品,從而為用戶提供更多的選擇。
綜合考慮這些指標(biāo),如果在進(jìn)行景點(diǎn)推薦時(shí)更注重推薦的準(zhǔn)確性和全面性,則UserCF模型可能更適合;如果注重推薦的覆蓋率,那么ItemCF模型可能更適合。在推薦系統(tǒng)中,使用UserCF模型對(duì)景點(diǎn)進(jìn)行推薦,可以找到與目標(biāo)用戶興趣相似的4個(gè)用戶,并為其推薦4個(gè)景點(diǎn)。通過讀取文件獲取“用戶-景點(diǎn)”數(shù)據(jù),通過訓(xùn)練集和測(cè)試集計(jì)算用戶的相似度,并將結(jié)果保存在用戶相似度矩陣中。在推薦系統(tǒng)中,同樣使用ItemCF模型對(duì)旅游景點(diǎn)進(jìn)行推薦;綜合這兩種推薦方法,使用ItemCF推薦模型可以提高推薦景點(diǎn)的覆蓋率,而使用UserCF模型則可以提高推薦景點(diǎn)的準(zhǔn)確性和全面性。綜合這兩種推薦方法可以得到使用戶更滿意的推薦結(jié)果。
5 結(jié)論
本文主要介紹了兩種協(xié)同過濾推薦算法,以及算法的思想和代碼實(shí)現(xiàn)。在公開數(shù)據(jù)集上對(duì)兩種算法進(jìn)行了測(cè)試,并使用訓(xùn)練集和測(cè)試集進(jìn)行評(píng)估,通過準(zhǔn)確率、召回率和覆蓋率三個(gè)指標(biāo)來評(píng)估推薦結(jié)果。實(shí)驗(yàn)結(jié)果表明,UserCF模型能夠更準(zhǔn)確地預(yù)測(cè)用戶會(huì)喜歡的物品,并且能夠更全面地推薦物品,獲得了較高的準(zhǔn)確率和召回率,但覆蓋率略低。ItemCF模型能夠覆蓋更多的物品,從而為用戶提供更多選擇。