乾貨!三大招教你輕鬆挖掘客戶意見(含Python程式碼)。

  • 2020 年 2 月 26 日
  • 筆記

導讀

隨著大數據營銷模式的發展,精準了解客戶需求越來越重要,這其中最好的方式,就是直接收集客戶意見。但客戶意見往往天馬行空,既無序又雜亂。雖然收集的意見不少,但分析出有效的資訊少之又少。因此怎樣從大量意見中挖掘出有效資訊,真正讀懂客戶的心,成為一個剛需。

01目標和分析方法

本文通過一整套流程對問卷調查中客戶回答的文本意見進行處理和對隱藏資訊挖掘,主要目標包括:

(1)將雜亂文本進行預處理,形成有效資訊;

(2)將有效資訊進行拆解,歸納主要意見;

(3)將主要意見進行主題劃分,在意見中尋找深層的需求。

02 分析方法

1.文本預處理方法
  • (1)文本去噪

一份原始的文字語料中往往有很多干擾資訊,包括標點符號、數字、英文字母、轉換符等雜訊,這些是首先要刪除的。

  • (2)文本去重

文本去重包括兩個部分,即重複語句刪除和重複詞壓縮。

重複語句刪除就是去掉文本中重複的部分,這是是獲得乾淨的文本數據後的第一步處理。一般情況下,不同客戶之間有價值的意見是不會出現完全重複的文字,所以進行文本去重後,可以刪去無效和重複的資訊,有助於篩選出有意義的意見。

對於重複詞壓縮的原因,主要是在線問卷調查時,往往有最少字數要求。所以客戶往往會複製粘貼很多同樣的詞。比如像這樣:「好好好好好好好好好好」、「不錯不錯不錯不錯不錯」, 這類資訊都需要壓縮和精簡。

  • (3)短句刪除

完成重複詞壓縮後,還存在一些短句字數過少,這也是沒有意義的意見。比如:「很不錯」「很好」等。因此,最後還要對字數過少的句子刪除。

2.文本分詞和統計

為了對意見進行分析,需要將短句劃分為詞,即將連續的字序列按照一定的規範重新組合成詞序列的過程。接著,通過高頻率片語進行統計,就可以掌握客戶的主要意見。

3.主題分析

主題分析是通過機器學習和自然語言處理等方法在大量的文本中自動抽象出主題的一種統計模型。這類模型要考慮到文本背後的語義關聯的關係,發現文本詞語的規律,實現在非結構化的文本中找到有效的資訊。

03 實際操作案例

本文針對一份線上問卷調查中的一個開放問題:」對於某銀行現有產品和服務體系,您有何改進建議?」收集了客戶的文本意見。本文整體分析流程包括:

  • 1.評論數據歸集

為案例演示,截取了部分客戶意見進行分析和講解。收集到的意見是像這樣的:

  • 2.文本預處理

(1)文本去噪

文本去噪的方法主要是利用re庫中的sub函數,進行英文、數字和特殊字元的刪除。

程式碼清單 1
#-*- coding: utf-8 -*-  import pandas as pd  import re    inputfileq0 = 'q_0.txt' #評論提取後保存路徑  outputfileq1 = 'q_1.txt' #評論處理後保存路徑  data = pd.read_csv(inputfileq0, encoding = 'utf-8', header = None)  filelist =  list(data[0])  filelist2 = []  r='[s+.!/_,$%^*(+"')]+|[::+——()?【】「」!,。?、~@#¥%……&*()]+'  r1='[^u4e00-u9fa5]'  for a_string in filelist:      a_string=str(a_string)      temp = re.sub(r,'',a_string)   #刪除標點符號      temp = re.sub(r1,'',temp)   #刪除英文和數字      filelist2.append(temp)  filelist3 =  pd.DataFrame(filelist2)  filelist3.to_csv(outputfileq1, index = False, header = False, encoding = 'utf-8')  

(2)文本去重

首先進行重複語句刪除。為了盡量保留有用的資訊,一般採用比較刪除法,通過在重複文字中篩選保留其中1條,來儘可能存留有用的意見。也就是這條語句:*data = pd.DataFrame(data[0].unique()) *。

程式碼清單 2
#-*- coding: utf-8 -*-  import pandas as pd    inputfileq14 = 'q_1.txt' #評論提取後保存路徑  outputfileq14 = 'q_2.txt' #評論處理後保存路徑  data = pd.read_csv(inputfileq14, encoding = 'utf-8', header = None)  l1 = len(data)  data = pd.DataFrame(data[0].unique())  l2 = len(data)  data.to_csv(outputfileq14, index = False, header = False, encoding = 'utf-8')  print(u'刪除了%s條記錄。' %(l1 - l2))  

再進行重複詞壓縮。重複詞壓縮也稱為機械壓縮,主要原理就是通過分析前後、中間重複的語料,進行重複詞的壓縮處理。這裡自己寫了一個find_chinese程式,用於文本機械壓縮的實現。

程式碼清單 3
# -*- coding: utf-8 -*-    import pandas as pd  import find_chinese as wenben  inputfileq13 = u'q_2.txt' #評論處理後保存路徑  outputfileq13 = u'q_3.txt' #評論處理後保存路徑    data= pd.read_csv(inputfileq13, header = None)  filelist =  list(data[0])  filelist2 = []  j=0  for a_string in filelist:      a_string=str(a_string)      temp1 = a_string.strip('n')      temp2 = temp1.lstrip('ufeff')      temp3 = temp2.strip('r')      temp4 = wenben.find_chinese(temp3)      temp5 = ""      if temp4!='':          temp5 = wenben.delete_copy(temp4)      filelist2.append(temp5)  filelist3 =  pd.DataFrame(filelist2)  filelist3.to_csv(outputfileq13, index = False, header = False,encoding = 'utf-8')  

(3)短句刪除

完成機械壓縮去詞處理後,就進入到最後的預處理步驟:短句刪除。短句刪除的原理就是設定意見字數的下限(這裡是4個字元),將小於這個下限的語料刪除。

程式碼清單 4
# -*- coding: utf-8 -*-  import pandas as pd    inputfileq0 = 'q_3.txt' #輸入  outputfileq1 = 'q_4.txt' #輸出  data = pd.read_csv(inputfileq0, encoding = 'utf-8', header = None)  filelist =  list(data[0])  filelist2 = []  for a_string in filelist:      a_string=str(a_string)      if(a_string == ''):          continue      else:          if(len(a_string)<4):              continue          else:              filelist2.append(a_string)  filelist3 =  pd.DataFrame(filelist2)  filelist3.to_csv(outputfileq1, index = False, header = False, encoding = 'utf-8')  
  • 3.文本分詞和統計

本文採用Python的中文分詞包「jieba」(結巴分詞)對文本意見進行中文分詞,此分詞系統的分詞精度可達97%以上。同時在分詞的過程中,還可以對不用的語料再進行一次刪除。

為了科學的了解客戶的主要意見,需要對所有的片語進行統計,分析客戶意見集中在哪些方面。同時為了形象了查看客戶的意見,還可以用詞雲圖顯示客戶的主要意見。

程式碼清單 5
# -*- coding: utf-8 -*-  import collections  import pandas as pd  import jieba #導入結巴分詞,需要自行下載安裝  from wordcloud import WordCloud  import matplotlib.pyplot as plt    def stopwordslist(filepath):      stopwords= open(filepath,encoding = 'utf-8').read()      stopwords=jieba.cut(stopwords, cut_all = True)      stopwords2 = "n ".join(stopwords)      return stopwords2  def movestopwords(sentence):      stopwords = stopwordslist('stoplist.txt')  # 這裡載入停用詞的路徑      outstr = ''      for word in sentence.split("n"):          if word not in stopwords:              if word != 't'and'n':                  outstr += word      return outstr  inputfileq0 = u'q_4.txt' #輸入  text = open(inputfileq0,encoding = 'utf-8').read()  wordlist_text = jieba.cut(text, cut_all = True)  wl_space_split = "n ".join(wordlist_text)  listcontent = movestopwords(wl_space_split)  #統計詞頻  str1=listcontent.split(" ")  q = collections.Counter(str1)  dataq =  pd.DataFrame(q.items())  dataq.to_excel("q5.xlsx",  header = False, encoding = 'utf-8')  #生成詞雲  outputfile = 'ciyun.jpg'  my_wordcloud = WordCloud(              background_color='white',    # 設置背景顏              #mask = abel_mask,        # 設置背景圖片              max_words = 2000,            # 設置最大現實的字數              collocations=False,              font_path = 'simhei.ttf',# 設置字體格式,如不設置顯示不了中文                  scale = 4                  ).generate(listcontent)  plt.imshow(my_wordcloud)  plt.axis("off")  plt.show()  my_wordcloud.to_file(outputfile)  
  • 4.LDA主題劃分

LDA(Latent Dirichlet Allocation)是一種文檔主題生成模型,能夠挖掘數據集中的潛在主題,進而有助於分析文本內容的關注點。在本文的研究中,可以通過LDA模型從大量高頻的辭彙中選出最有代表性的主題,可以更合理的分析客戶的意見。

程式碼清單 6
#-*- coding: utf-8 -*-  import pandas as pd  from gensim import corpora, models    inputfileq = u'q_5.txt'  outputfileq= u'q_6.txt'  inputfileq = pd.read_csv(inputfileq, encoding = 'utf-8', header = None) #讀入數據  inputfileq[1] = inputfileq[0].apply(lambda s: s.split(' ')) #定義一個分割函數,然後用apply廣播  #主題分析  inputfileq_dict = corpora.Dictionary(inputfileq[1]) #建立詞典  inputfileq13_corpus = [inputfileq_dict.doc2bow(i) for i in inputfileq[1]] #建立語料庫  inputfileq13_lda = models.LdaModel(inputfileq13_corpus, num_topics = 3, id2word = inputfileq_dict) #LDA模型訓練  filelist = []  for i in range(3):      filelist.append(inputfileq13_lda.print_topic(i))      print (inputfileq13_lda.print_topic(i)) #輸出每個主題  filelist1 =  pd.DataFrame(filelist)  filelist1.to_csv(outputfileq, index = False, header = False, encoding = 'utf-8')  

04 結果展現和解讀

  • 1.詞雲圖效果

將客戶的意見用詞雲圖來顯示效果是這樣的,從圖中可以很輕鬆的看出客戶對銀行投資理財的意見較多。

  • 2.高頻率詞分析

僅僅是詞雲圖,還不足以量化分析客戶的意見。因此通過詞頻的統計,可以更準確的了解客戶意見。如下圖所示。

從上圖的片語頻率統計情況來看,客戶的主要意見集中在理財產品服務、產品種類、產品時間和優惠等方面。

  • 3.主題分析

當收集的客戶意見數量較多時,還需要通過科學的方法來歸類。經過LDA主題分析後,文本意見分為了3個主題,每個主題下生成了10個最有可能出現的詞語以及相應的概率。下表展示了主題的主要內容。

從上表來分析,主題1中篩選的有效的主題詞,主要反映了客戶希望理財產品的品種更多一些。主題2中篩選的有效的主題詞,主要反映了客戶希望理財產品的收益水平更大一些。主題3中篩選的有效的主題詞,主要反映了客戶希望投資理財的服務需改進,開展更多的理財活動。

針對LDA主題模型結論的分析,可以在以下方面進行改進:一是理財產品需進一步豐富,滿足客戶多元化的需求。二是投資理財資訊要提前進行宣傳,開展形式多樣的理財活動,提升客戶滿意度。三是要多推出收益較高的產品,吸引客戶投資。

05 小結

本文通過系統的介紹文本處理的全流程方案,幫助讀者直接上手處理大量、雜亂的語料資訊,最快速度挖掘出有效的資訊,掌握客戶意見。

Tags: