後疫情時代,數據科學賦能旅遊行業服務質量提升

語言: CN / TW / HK

通宵燈火人如織,一派歌聲喜欲狂。新冠“乙類乙管”的實施加上春節假期的到來,使得人們的出行熱情空前高漲。根據中國旅遊研究院的調查顯示,23年春節假期全國國內旅遊出遊達到了3.08億人次,同比增長23.1%,期間旅遊收入達3758.43億元。以杭州西湖景區為例,該景區在春節期間招待遊客292.86萬人次,數量近上年的4倍。各大景區熱鬧非凡、遊客絡繹不絕的新聞也成為了人們對23年春節獨特的回憶。

由於先前的新冠風控,許多景區在財政和園區管理方面經歷了難熬的兩年。在遊客反饋方面,由於人次過少,景區非常容易陷入無法對遊客需求進行準確判斷的困境。瞭解遊客的真實感受和評價,並根據這些信息對景區硬件、軟件、管理等進行升級,是景區應對暴漲的遊客需求和期待最有效的解決方案之一。

面對後疫情時代下,旅遊行業逐漸邁向復甦,景區該如何把握機會,通過提升服務來滿足遊客需求呢?基於以上背景,我們決定建立這樣一個實驗性項目,讓數據來告訴大家答案。

項目背景與結構

全球旅遊業權威研究機構 PhoCusWright 指出,大眾對於景區的點評值得被加以分析與運用,可以為旅遊企業帶來巨大的價值。很多景區管理部門由於對遊客需求的誤解、信息技術的落後、或是相關反饋部門的缺失,對於網絡上的評論並未做到有效的收集與分析。在進入大數據時代後,一些適應了新型數據平台的景區管理部門通過在網絡上收集與景區相關的評論,並對這些數據進一步分析來重點調整、升級景區中讓遊客在意的部分。其中就涉及了對各大旅遊點評網站中景點評論的歸納總結,包括對遊客類別的統計和評論文本信息的建模與分析。

旅遊網站的種類眾多,但商業價值的側重點會有所不同。貓途鷹(TripAdvisor)是一款側重於記錄用户旅行數據的國際性旅遊網站,擁有着數十億條國內外真實旅行者的點評和建議。許多遊客在出行前會在該平台查詢目的地酒店、餐廳和景點的相關點評,多而全的點評信息不僅能幫助旅客做出出遊決定,也是景區收集遊客反饋的好渠道。

本項目以熱門景點“上海外灘”為例,採集貓途鷹網站上與該景點相關的評論,查看隨着時間與出行政策的變化,國內外遊客在出遊方式和態度上的轉變,結合 NLP(自然語言處理)技術,挖掘評論中值得借鑑的意見和建議,尋找遊客對景點需求的趨勢。總體的解決方案結構如下:

  • 確定數據來源
  • 數據採集
  • 數據入庫
  • 數據清洗
  • 探索性數據分析
  • 數據建模
  • 數據洞察

項目步驟解析

1. 確定數據來源

首先,我們確定使用來自貓途鷹中文版網站(www.tripadvisor.cn)和國際版網站(www.tripadvisor.com)截至2023年2月20日的數據。重點關注旅遊者對“上海外灘”這個景點的中英文評論,收集來自世界各地的評論有助於提升景區的分析維度,讓決策更具包容性,這也是我們選擇貓途鷹這個國際化旅遊平台的原因。

2. 數據採集

在對網頁抓取工具做了深度評估、對網頁數據和結構的初步瞭解後,我們決定使用 Selenium 進行網頁文本數據的抓取。根據評論格式的特點,我們可以抓取的信息如下:

  • 用户
  • 用户所在地
  • 評分
  • 點評標題
  • 到訪日期
  • 旅行類型
  • 詳細點評
  • 撰寫日期

注意,對於中文評論的抓取,我們把用户所在地鎖定至城市,而對於英文評論,用户所在地的抓取會詳細至國家和城市。最終,我們執行的網頁抓取程序大致可以分成兩個步驟:

  • 第一步:發送請求,使用 Selenium 操作瀏覽器找到指定景點的評論頁面
  • 第二步:進入評論頁面,抓取評論數據

由於中文評論的數量遠少於英文評論,為了保持數據總量的一致性,我們採集了中文評論的全量數據(1710條,時間跨度2009-2022年)和英文評論的部分數據(2000條,時間跨度2018-2022年)。如果大家想從完整的時間線維度對比中英文評論,可以自行獲取更多英文評論數據,在本項目中我們就不多加贅述了。

3. 數據入庫

在採集完畢評論數據後,我們可以將數據存進數據庫,以便數據分享,進行下一步的分析與建模。以 PieCloudDB Database 為例,我們可以使用 Python 的 Postgres SQL 驅動與 PieCloudDB 進行連接。在《PieCloudDB Database 雲上商業智能的最佳實踐》中,我們詳細介紹了 PieCloudDB 的外部連接方式,如有需求請參考這篇技術博文

我們實現數據入庫的方式是,在獲取了評論數據並整合為 Pandas DataFrame 結構後,藉助 SQLAlchemy 引擎將該數據通過 psycopg2 上傳至數據庫。由於中英文的文本分析技巧略有不同,所以我們將中英文數據存放在兩張表中。最終,我們可以在 PieCloudDB 中查看如下兩張源數據表結構:

中文表

英文表

4. 數據清洗

數據清洗是指對重複或多餘的數據篩選和清除,同時完整地補充丟失的數據,糾正或刪除錯誤的數據,最後整理成我們可以進一步處理和使用的數據。在這裏,我們會對數據進行空值填充和類型轉換。

  • 空值填充:中文表中的 trip_type(旅行類型)這一列存在807個空值,我們使用“未知”文本填充;英文表中trip_type(旅行類型)的405個空值也是同樣的操作,而對於 location_city(所在地城市)和 location_country(所在地國家)這兩個變量,我們通過手動檢索來識別誤填、漏填和錯位的情況,然後修正或補齊信息。
  • 類型轉換:中文表中的 rating(評分)這一列數據類型不匹配,我們將其轉換成便於後續計算的 int 類型。

因為數據是按照規範的數據結構採集的,所以數據清洗部分相對簡單。接下來,我們就可以用初步清洗後的數據做一些探索性分析。

5. 探索性數據分析

我們使用 BI 工具 Tableau 外部接入 PieCloudDB,具體步驟請參考這裏。為了將中英文評論數據可視化,我們繪製瞭如下兩張動態化的儀表板:

中文儀表板

英文儀表板

以中文評論儀表板為例,我們可以通過右側的評論時間篩選器來調節整個儀表板的數據使用範圍,上圖就是顯示了近十年的中文評論數據情況。我們將評分劃分了三個等級:好評(4-5分)、中評(3分)和差評(1-2分),並將評論數量的分佈細分至每一年的每個季度。通過探索性數據分析,我們總結了以下幾點可用信息:

  • 自疫情(2019年底)以來,評論數量急劇下降,説明疫情對遊客的出行影響重大。
  • 使用該平台的用户所在地主要集中在上海、中國台灣、中國香港、江蘇等地區,也正是參觀上海外灘景點的主要華人遊客來源。
  • 近十年來,大家更傾向於結伴旅行,獨自旅行的佔比也在逐年增加。
  • 各地區對上海外灘這個景點的評價總體很高,來自重慶的遊客評價相對偏低。
  • 我們認為 trip_type(旅行類型)存在大量空值的原因大概率是平台的升級,在2013年6月左右給用户增加了旅行方式的選擇功能。因為通過調節時間篩選器,我們發現在2013年6月以前,所有評論均為未知旅行類型,在此之後才有其它旅行類型的出現。
  • 旅遊從業者可以重點關注出現差評的年份和季度,將差評的評論單拉出來,進行深度分析。

英文評論儀表板的信息提煉方式也非常類似,這裏就不重複贅述了。對比中英文語言使用者的遊客,我們發現了一個明顯的差異點:參觀上海外灘的英文遊客更傾向於情侶遊(couples),國內遊客更傾向於結伴旅行(friends)和獨自旅行(solo)。

6. 數據建模

在對數據有個初步的瞭解後,我們就可以進行更高階的建模分析了。這裏,我們嘗試了多種分析方法:emoji 分析、分詞關鍵詞、文本情感分析、詞性詞頻分析、主題模型文本分類。對於模型而言,文字並非有效輸入,我們需要將文本信息數字化,再將數字化結果傳遞給模型,輸出結果。注意,由於中英文的自然語言處理是兩種體系,所以我們會選擇各體系中更為成熟的工具去使用。

· emoji 分析

首先,我們發現有些評論中會夾雜多種語言,當分析重點是中文評論時,我們以句為單位,篩選掉非中文的文本。同樣,側重點是英文評論時,也是類似的操作。與此同時,評論中還會夾雜emoji表情,因為年輕用户的emoji使用頻率越來越高,所以我們決定把這類文本從評論文本中分離出來,從中文評論中得到這樣一個emoji的列表:

從英文評論中又得到了以下emoji的列表:

之後,我們會結合評論的正負向情感對emoji進一步分析。

· 分詞關鍵詞

其次,我們需要對每個文本進行分詞,並對詞性進行標註。中文評論部分使用的 Python 庫為 jieba,是最受歡迎的中文分詞組件之一,包含使用 Viterbi 算法新詞學習的能力。它擁有多種分詞模式,其中 paddle 模式利用了 PaddlePaddle 深度學習框架,訓練序列標註(雙向GRU)網絡模型實現分詞。為了判斷哪類分詞方式更適合,我們選取數據中的評論樣本進行測試,最終我們選定了精準模式來做分詞。

舉個例子,“外灘矗立着52幢風格迥異的古典復興大樓,素有外灘萬國建築博覽羣之稱,是中國近現代重要史蹟及代表性建築,上海的地標之一,1996年11月,中華人民共和國國務院將其列入第四批全國重點文物保護單位。”評論經過分詞處理後,返回如下結果:外灘/ 矗立/ 着/ 52/ 幢/ 風格/ 迥異/ 的/ 古典/ 復興/ 大樓/ ,/ 素有/ 外灘/ 萬國/ 建築/ 博覽/ 羣之稱/ ,/ 是/ 中國/ 近現代/ 重要/ 史蹟/ 及/ 代表性/ 建築/ ,/ 上海/ 的/ 地標/ 之一/ ,/ 1996/ 年/ 11/ 月/ ,/ 中華人民共和國國務院/ 將/ 其/ 列入/ 第四批/ 全國/ 重點/ 文物保護/ 單位/ 。

Jieba 中包含兩種更高階的用來計算關鍵詞的算法:TF-IDF 和 TextRank。其中 TF-IDF 作為詞袋模型(Bag of Word)也經常被用來作為將文字內容數字化的算法之一。由於這兩種算法自帶清理模塊,我們直接使用了原文本而並非去除了停用詞的語料。

基於TF-IDF和TextRank算法的前20個關鍵詞分別如下,可以看到關鍵詞的權重排序上略有不同:

英文 NLP 中最領先的平台之一便是 NLTK(Natural Language Toolkit)。NLTK 擁有50個語料庫和詞彙資料,開發了多種如分詞、情感分析、標記、語義推理等語言處理功能。因此在處理英文評論時,我們選擇 NLTK 來處理英文語料。在分詞的過程中,各個詞會同步進行詞性標註。

· 文本情感分析

主流的中文文本情感分析模型有兩種:使用經典機器學習貝葉斯算法的 SnowNLP 和使用 RNN 的 Cemotion。SnowNLP 和 Cemotion 的返回值都在0-1之間。SnowNLP 返回值越接近0則越負向,越接近1則越正向;而 Cemotion 返回的是文本是正向的概率。在測試過程中,我們發現 SnowNLP 在計算速度上更快,但精確度有限;Cemotion 雖然速度慢,但精準度更高。因此,結合我們的數據量,在本項目中我們將保留 Cemotion 的結果。注意,兩種算法都包含了分詞等功能,只需輸入文本信息即可獲得情感傾向結果。最後,在1710條中文評論中,負向情感傾向的評論有117條(佔比7.19%),正向情感的有1593條(佔比92.81%)。

對於英文評論的情感分析,也是類似的操作,但我們選擇了更適合英文語料的工具 TextBlob(NLTK 的包裝器模式)。最終,在2000條英文評論中,負向情感傾向的評論有50條(佔比2.5%),正向情感的有1950條(佔比97.5%)。

· 詞性詞頻分析

在中文分詞的基礎上,我們還做了詞性的標註,以名詞為例,jieba 會將名詞進一步細分為普通名詞、地名、人名和其他專名。我們按照以下方式將 jieba 分詞後的詞語歸類為名詞、動詞和形容詞三類:

  • 名詞(n):n,nr,ns,nt,nz
  • 動詞(v):v,vn
  • 形容詞(a):a

和中文評論類似,我們按照以下方式將 nltk 分詞後的英文單詞做了如下歸類:

  • 名詞(n):NN,NNS,NNP,NNPS,FW
  • 動詞(v):VB,VBD,VBG,VBN
  • 形容詞(a):JJ,JJR,JJS

然後,從多個維度對詞語進行詞頻統計,分別是:情緒傾向、詞性、評論年份、評論月份。在這過程中,為了進一步瞭解遊客們對上海外灘的討論內容,我們將中英文語料中的名詞、動詞和形容詞分別製作了詞頻詞雲。從下圖可以看到,無論是中文還是英文的語料,佔比較高的詞在意義上非常相近,兩種語言的詞雲結果很類似。

中文

英文

· 主題模型文本分類

為了豐富文本分析的層次,我們還使用主題模型(Topic Modelling)對語料進行無監督學習,根據語義將類似的文本劃為一組,對評論進行分類。主題模型主要有兩類:pLSA(Probabilistic Latent Semantic Analysis)和 LDA(Latent Dirichlet Allocation),LDA 是基於 pLSA 算法的延伸,使得模型可以適應新的文本。這裏,我們使用了 Python 的 Genism 工具庫來識別中英文文本的語意主題。

以LDA為分類器的2類主題的中文單詞分佈為:

(0, '0.012*"夜景" + 0.011*"建築" + 0.011*"人" + 0.010*"都" + 0.009*"去" + 0.009*"很" + 0.009*"晚上" + 0.008*"非常" + 0.006*"黃浦江" + 0.006*"地方"')

(1, '0.021*"很" + 0.021*"去" + 0.019*"人" + 0.015*"都" + 0.012*"夜景" + 0.010*"晚上" + 0.010*"建築" + 0.008*"看" + 0.007*"感覺" + 0.007*"很多"')

我們可以看出,結果並沒有太大區別。事實上,在建模過程中,很多模型的表現並不會像人們預期的一樣好。不過由此也可以看出,基本上中文評論並沒有突出的類別,遊客基本以遊覽景觀和建築為主,並且遊覽時間大多為晚上。

同樣的,我們也對英文評論進行了主題模型的文本分類,與中文評論類似,英文評論的分類並沒有很突出的類別。從最後的分類結果中可以看出,英文評論大致可以分成三類:夜景與建築、夜景與黃浦江風光、夜景與燈光秀,遊客對上海外灘的關注重點是夜景。

以LDA為分類器的3類主題的英文單詞分佈為:

(0, '0.027*"view" + 0.020*"night" + 0.019*"building" + 0.017*"river" + 0.015*"walk" + 0.014*"great" + 0.011*"beautiful" + 0.010*"see" + 0.010*"place" + 0.009*"light"')

(1, '0.025*"view" + 0.022*"night" + 0.016*"place" + 0.016*"river" + 0.015*"see" + 0.013*"walk" + 0.013*"building" + 0.012*"light" + 0.011*"visit" + 0.010*"day"')

(2, '0.022*"night" + 0.021*"view" + 0.017*"light" + 0.016*"building" + 0.015*"see" + 0.014*"river" + 0.013*"place" + 0.011*"day" + 0.011*"must" + 0.011*"great"')

7. 數據洞察

在數據建模的基礎上,針對中文評論,我們將情感傾向、emoji、評論時間、詞性、評分和旅行類型這些變量的關係可視化,繪製瞭如下動態化的儀表板:

我們可以通過右側的評論時間、情感傾向、詞性篩選器來調節整個儀表板的數據使用。從儀表板的六張圖中,我們產生了很多數據洞察和建議,希望對於旅遊行業的工作者來説,也有一定的借鑑意義

  • emoji 的使用也是衡量情感傾向的一個指標,可以反映一些被忽視的情況,比如就上海外灘這個景點來説,“⛈” 和 “🍃” 反映了下雨刮風對遊客評價的影響。
  • 2021年的負向情感佔比最高,建議着重查看負向情感佔比高的時期,甚至可以細分到季度和月份。
  • 各類詞語(名詞、形容詞、動詞)的使用頻率與情感傾向也有關,比如產生負向情緒時通常會使用哪些詞語,從中可以發現景點設施、服務的一些問題。
  • 不同旅行類型(獨自旅遊、結伴旅行、商務行等)的遊客對景點評價的情感傾向也略有不同,建議景點可以照顧到各種類遊客的需求。
  • 最後也是最重要的一點,可以關注評分和情感傾向嚴重不符的例子,雖然情感傾向的判斷不是100%準確,但在某種意義上可以反映評價的客觀程度

舉個例子,對於以下這條評論,雖然評分只有1,但是模型判斷的情感傾向是正向的。經過仔細閲讀,發現確實是一條讚揚景點的評論,遊客的打分與評論不匹配,説明評分低不一定是景點的問題,可能是遊客的評分不夠客觀。

再舉一個例子,對於以下評論,雖然給出了5分的高分,但情感傾向識別為負向。我們查看點評後發現,遊客對於人太多、使用嬰兒推車不方便等方面進行了反饋,確實存在一些負向情緒,説明遊客打高分的同時也可能提出問題。

       

對於英文評論的建模結果,我們也可以使用類似的可視化分析流程,這裏就不重複贅述步驟了。最後,我們還綜合對比了中英文評論。整體而言,中外遊客對於上海外灘的遊覽印象趨同,景色、建築、燈光秀等關鍵詞都頻繁地出現在評論中,但從細節上來對比,中外遊客的評論還是有以下這些差異

  • 外國遊客中,除未提供旅行類型信息的人外,以情侶或結伴的多人出遊為主,而國內遊客近年來獨自旅行的佔比會更高。
  • 外國遊客對景點的整體評分會比中國遊客高,並且模型判定的情感傾向也更正向。
  • 外國遊客對上海外灘的風光與建築留下了深刻印象,由此衍生的評論大多數是好評,但和中文評論相比,對於人文方面的評論(如物價、設施、與當地人或服務業接觸的感受)要少許多。
  • 中文評論會非常直接地指出除風景、建築以外的感受,如公共衞生、便利設施、服務質量等問題。
  • 中文評論更偏愛使用 emoji,且會出現在各種情感傾向中,而外國遊客使用 emoji 絕大多數是為了表達正向情感。

項目結論

在上述數據科學的流程中,探索性分析步驟帶領我們瞭解和可視化數據,而數據建模步驟則在此基礎上,將文本數據抽絲剝繭,協助我們發現數據深層的含義。如果我們只看統計的指標性數據,而忽略了文本中常帶有發表者的個人情感傾向,就會使最終分析的結果不夠客觀,繼而損失了很多發表者的寶貴意見。數據建模在整個解決方案中不是必需項但卻是加分項,可以極大程度地提升數據分析的深度,挖掘數據內在的價值,形成有用的數據洞察從而輔助決策。如果大家對本項目中數據採集、數據清理和數據建模的原理和代碼實現感興趣,可以關注 Data Science Lab 的後續博文。

 

 


 

 

參考資料:

 

本文中部分數據來自互聯網,如若侵權,請聯繫刪除