到今天才開始撰寫競價的第一篇文章,其實一直以來特別想聊聊付費投放相關的,相對于SEO,我更喜歡SEM、FEED,付費投放也確實給我帶來很大價值。
SEM是復雜問題簡單化,不用考慮太多未知的算法、規則、技術、思路等,只要在持續把控ROI的前提下思考用戶需求和優化固定指標即可,SEO則相反,很多時候你要優化的問題是不是個問題都不一定。
競價排名廣告是離不開關鍵詞的,但絕大部分SEMer沒有任何技術能力,特別是官方代理商公司里的運營人員,幾乎是有一個算一個,所以一般只會使用官方的工具來簡單拓詞(比如關鍵詞規劃師),又或者通過"搜索詞報告"來發現新詞等等。
舉個例子:外包公司推廣小程序定制開發業務,一般的拓詞方式是打開百度關鍵詞規劃師拓展:
然后繼續把常見的:"小程序開發"、"小程序定制"、"小程序多少錢"等等拓展一遍。
最終在Excel里去重、再人工挑選出認為有商業價值、有流量、值得投放的關鍵詞,放入賬戶,一般是幾百到幾千不等,開始投放。
帶來的問題是:
這些大家都有,并不稀奇,我們能看到,別人也能看到,工具也不會一下子把數據庫里有的都給你,那么一些想象不到的詞根詞綴往往可能拓展不出來,這就可能漏掉了很多需求。
優先會被拓展出來的詞,都是搜索量極高的熱詞,他們的轉化不一定是最好的,但廣告成本一定是最高的。
通過搜索詞報告(系統會把用戶每天通過什么詞點擊你的廣告統計給你)來發現更多沒有考慮到的長尾詞不是不可以,但是需要時間成本和預算成本,往往還不小(想要量大得開寬泛的匹配浪費更多預算),很容易在數據測算時期就夭折了。
特別是很多傳統行業的公司,沒有專業的SEMer,賬戶都是托管給代理商的客服人員(因為免費的),他們搭建賬戶的方式千篇一律(畢竟每個人手上都有幾十個不等的賬戶要管理),幾乎是接到戶之后就打開"關鍵詞規劃師",輸入行業主詞,簡單挑選幾百個有明顯商業價值的詞,粗暴的區分幾個單元就開始投放了,不管競爭強度不管長尾流量,更別提賬戶質量度。
最終會造成整個行業的人習慣性的在搶占少部分看得到的熱詞,又因為競價的機制,點擊單價快速拉升,廣告預算水漲船高,最后得出結論:百度競價真貴!!!
而事實上在理想情況下應該是像我們標題所表達的意思:
盡可能挖掘出更多還沒人花錢投放的有效詞,這些詞才是實打實的真金白銀,做了等于撿錢!
1:收集詞綴
在過往的文章里,我們為了挖掘用戶需求,已經涉及過各種渠道的挖詞方式,以及一些巧妙的挖詞思路,但事實上只要你愿意,還會有更多。
當我們向百度搜索框里搜索:"小程序"
我們可以看到百度為我們找到了"74,000,000"個網頁,也就是它的數據庫里至少有這么多跟小程序相關的頁面。
可事實上我們只能得到760個網頁:
實際原因一是它不認為我們需要那么多,只需要把最優質的、最相關的給我們即可,再一個是客觀上來說我們也"承受不起",帶寬資源和硬件設備沒辦法一下子接收,當然還包括其他原因。
但是當我們搜索:"小程序 ":
百度數據庫里就顯示大約只有"1,030,000"個,并且圖中被紅框框選出來的頁面,在我們上一次搜索時,應該是沒出現的,僅僅是因為這次我們搜索詞里明確有"",因此百度優先幫我們返回包含""的。
我們把這個現象對應到任何關鍵詞拓展工具里,其實都是一個道理,特別是百度關鍵詞規劃師:
如上圖通過這種方式是拓展不了多少個詞的,如果我們加上相應的詞綴,比如"開發",就可以專門提取跟"開發"有關的"小程序"長尾詞,按照這個道理,我們只要反復加上各式各樣的詞綴,理論上幾乎可以把工具背后的數據庫里有的長尾詞全部提取出來。
但是:
問題1:小程序這個領域包含哪些詞綴?
問題2:可以想象是的成千上萬,怎么批量收集,又怎么批量拓詞?
對于這兩個問題,我們過往文章也涉及到這個場景,比如先拓展一批詞,對它們分詞,把主詞帶著高頻詞綴去工具里搜索:
可是通過一兩次的拓展,分詞統計出來的詞綴并不全面,起碼很有限,另外別說成千上萬,就是幾百個詞綴反反復復一個個帶著去工具里搜索拓展,也只有狠人才能干得出來。
這也是為什么大部分管理競價的人員只能簡單拓展小部分關鍵詞就開始投放的原因,說到底還是要借助技術。
PS:這里跟我們為了分析需求去挖詞還不太一樣,分析需求我們只需要找到有代表性的詞就可以,做競價,不同詞就是不同詞。
針對這個問題,本篇文章我們來使用另一種方式:利用海量文本內容來挖詞。
所謂的文本內容可以是:文章、回答、帖子、新聞等互聯網特有形式的文本內容。
簡單的邏輯是:
收集一批目標領域的文本內容,比如幾萬篇以小程序為主題的文章,以及一批非目標領域的隨機文本內容,比如幾十萬篇新聞文章(這幾十萬篇可以在不同行業重復利用)。
利用TF-IDF算法(是判斷文章主題時常見的算法)提取目標領域每一篇內容的高權詞。
TF-IDF算法之前討論過:
某篇文章中,高度反復出現的一些詞,在其他文章里很少出現,這些詞是最能說明文章主題的,在任何文章里總是出現的詞匯不助于理解文章,不具備重要性和相關性。
可以想象的是:
一堆小程序領域的內容,當然會頻繁出現跟小程序高度相關的詞匯,而在其他領域文章再多也不會出現多少,反過來類似"可是"、"好像"、"這個"等等這類無關痛癢的大眾詞匯,在任何正常書寫出來的內容里,都會出現百度關鍵詞擴展工具下載,而且還不少,單純在目標領域里計算,這些常見詞的權重分數也不低,有時候不是很好區分。
利用TF-IDF的思想,再結合無差別領域的內容來抑制常見詞的分數,沉淀出來的就是小程序領域的相關詞匯。
以它們作為詞綴結合"小程序"去反復拓詞,理論上就能盡可能的把整個領域的詞都收集到。
收集的內容越多,這種計算就越準確,且能整理的詞綴就越全面。
有了這個簡單的邏輯,我們開始來實現。
步驟1:收集內容
目標是某個領域的一批內容,什么地方能批量找出同領域內容呢?
很多,比如一些專題論壇、社區、各種垂直自媒體號等等,因為特定的關系它們的內容都圍繞具體某一領域,包括百度的搜索結果其實也可以,我這里挑選了某乎。
知乎里一個問題下的所有答案,不就是專門討論同一個主題的嘛,由此延伸的是:同一個話題下的所有問題對應的所有答案,也都是討論同一個領域的(所謂的領域是相對的),比如:
本次測試收集了知乎"小程序"話題下的9000+問題,標題包含"小程序"且有回答,總回答數37000+。
收集的方式可以+知乎官方api接口,或者使用第三方采集工具如:"火車頭"、"八爪魚",某寶找人代采集也可以。
部分測試數據:
對于非目標領域的無差別內容,百度找"新聞語料庫",有合適的直接下載,有技術能力也可以自己采集一些自媒體文章,有個一二十萬也行,分類隨機即可。
我這里收集了幾百W新聞文章的語料庫,涵蓋各種新聞類別,只拿了50W來參與計算。
步驟2:計算權重分數(程序員看)
雖然TF-IDF的算法思維很好,但它也有天生的缺陷,對于過濾低詞頻的不相關詞匯效果很顯著,但是某些常見詞比如:"可以",它在某些文章還就總是經常出現,詞頻很高,再加上非目標領域數據往往不見得全面,有時抑制效果不太好,還需要輔助支撐一下。
當然:"可以"和"小程序"等主題詞不見得就沒有任何關聯性,它們也是可以組成長尾詞的。
TF-IDF的計算,有現成的模塊:-learn,也不知道是不是我姿勢不對,前幾天試了一下,發現效率和分數都跟我自己寫的沒太大差別,也就沒用它了。
我自己之前簡單寫了一個函數(湊合著用):
# 記錄每個文檔里每個單詞的權重分數
docTfidf = dict()# docId:wordCount 存儲每個文檔對應的詞頻關系,順便作為總文檔數
docWordCount = dict()# 記錄單詞在哪些文檔出現過,用于統計單詞出現在多少個文檔
wordDocCount = defaultdict(set)# 記錄每個文檔的總詞數 包括重復
docAllWord = dict()# 分詞 需要去除數字 單字 符號等
def split_word(docId,docContent):
wordCount = defaultdict(int)
for word,flag in posseg.cut(docContent):
wordCount[word] += 1
docAllWord[docId] += 1
wordDocCount[word].add(docId)
return wordCount
# 計算權重def tfidf_count(docId):
tfidf = dict()
for word,count in docWordCount[docId]:
tf = float(count) / docAllWord[docId]
idf = math.log10(len(docWordCount) / (float(len(wordDocCount[word])+1))
tfidf[word] = round(tf * idf,2)
return sorted(tfidf.items(),key=lambda x:x[1],reverse=True)# 調用
# 遍歷文檔內容并分詞
for docId in range(len(dc)):
# wordCount 記錄單詞在當前文檔的詞頻
wordCount = split_word(docId,dc[docId])
docWordCount[docId] = wordCount
for docId in range(len(dc)):
docTfidf[docId] = tfidf_count(docId)上述代碼只是我個人湊合著用的,僅供參考,寫出來后也沒去改過,效率一般,有更好的方式還是自己寫。
本次程序邏輯的偽代碼:
# 存儲每個關鍵詞的最終權重
wordWeight = defaultdict(float)for content in allContent:
# 每篇內容的詞和詞頻數據
wordCount = defaultdict(int)
# 每篇內容的總詞數
allWord = 0
# 建議在沒有行業詞庫的前提下使用jieba的posseg,詞匯分到最細
for word,flag in posseg.cut(content):
allWord += 1
wordCount[word.encode('utf-8')] += 1
# 存儲單篇內容每個關鍵詞的權重
_wordWeight = defaultdict(float)
for word,count in wordCount.items():
tf = float(count) / allWord
# wordDocCount 事先準備的50W文章的關鍵詞:出現文檔數
idf = math.log10((500000+1) / float(wordDocCount[word]+1))
_wordWeight[word] += tf * idf
# 按權重值降序
_wordWeight = sorted(_wordWeight.items(),key=lambda x:x[1],reverse=True)
# 提取top20%
for word,weight in _wordWeight[:int(len(_wordWeight)*0.2)]:
wordWeight[word] += weight
# 最終結果按權重值降序
wordWeight = sorted(wordWeight.items(),key=lambda x:x[1],reverse=True)for word,weight in wordWeight:
# 文檔數大于一定值的去除,避免有些常見詞沒有被過濾
# 取值根據自己的語料數據,跑兩三次調整
if wordDocCount[word] > 100000:continue
print word,weight偽代碼僅供參考,還缺少一些步驟,不要直接使用,這是計算出來的高度相關詞匯,大概4W+:
按我們的常識經驗來看,越前面的這些詞匯都是和小程序這個領域高度相關的。
這種計算的好處在于:不用刻意處理停止詞、常見詞、無實意詞等等,因為隨著更多的無差別內容參與計算,大多數無效目標的分數會不斷降低:
經過上面計算,現在我們已經得到了關于"小程序 "在"全網"所能涉及的詞匯,即詞綴,之所以"全網"加上引號,是因為無論如何這都只能是理論上的全網,我們所收集的文本內容越多,就越接近,但始終無法真正的窮盡,盡可能比競爭對手多就可以了。
即使是一個剛接觸公司業務的競價新手,靠著工具也能想到或挖掘到諸如:"小程序 開發"這樣的長尾詞,既然是做外包開發業務,沒道理"開發"這樣的相關詞不投放,所以這些常見的有明確商業價值的詞綴并非我們使用這種拓詞方式的目標,那就首先要剔除這樣的詞綴。
一個簡單的方式是:
運用大家常規的挖詞方式先拓展一批詞,有個10000左右即可,對這些詞分詞,也把它們分成最基本的詞匯,把別人肯定會擴展的詞綴提取出來,比如這里的:
這些詞是明確的業務詞,別人肯定會挖掘,把提取出來的這些詞綴合在一起,假設把這份詞綴設為A,把我們剛才計算出來的詞綴設為B,用B-A,剩下的詞綴大部分就是別人常規手段挖掘不到的未知詞綴。
這一步驟,如果是要挖掘全網需求,是不需要的,但既然是為競價挖掘藍海詞,在這一方式里就沒必要再去拓展那些別人輕易拓展得到的詞綴,當然你要一起全盤處理也可以。
如何把"小程序" + 上面的詞綴批量組合到關鍵詞拓展工具里拓詞?比如:
然后工具可以自動輪番去查詢,畢竟一個個查詢、下載、整理,太崩潰了,這種功能除了解決一次拓展不全面的問題之外,還能解決定向挖掘的問題,畢竟有時候我們只需要挖掘某領域某方面的。
這個功能百度關鍵詞規劃師有個比較雞肋的:
我反正是不用它,官方API接口對很多人是用不了的,市面上的第三方工具有的有,不過既然是為了做競價,基本也是開了戶,那么就可以免費使用艾奇這款工具來拓展:
這是它們的工具介紹:
對接的也是百度官方的接口,數據時效性沒問題,主要是方便。
但是鑒于他們這個"必須包含"的功能,有時候用起來也挺感人,我更建議你以這樣的方式(但是不要一次性):
拓展出來后,直接復制結果里的詞,再黏貼到搜索框里,其他條件保持不變,繼續拓展。
需要注意的是,本次主要討論的是怎么批量收集重要的詞綴,有了這些詞綴,拓詞并沒有什么指定的工具,都一樣,在任何渠道或工具里,怎么方便怎么來,最后的目標詞還得查一遍搜索數。
按道理我們現在就可以拿著這些詞匯加上小程序比如:"小程序 答題",到工具里拓詞了,然后看看有沒有人在做這些詞的廣告,沒有我們就趕緊買詞。
但是我們現在想挖掘的是藍海流量,所以在這之前要考慮一些問題:
對于競價來說,所謂的藍海流量,邏輯很簡單:還沒人投放的長尾詞,但是在這之前有個問題:有價值。
什么算是有價值的詞呢?也許做競價的朋友已經考慮到一個問題,某個詞搜索下去,沒有人在做廣告:
我們也不能簡單的認為這個詞是藍海流量然后馬上加入到廣告賬戶里。
某個詞之所以搜索下去沒人在做廣告,也有可能是因為這個詞本身就沒有什么商業價值,我們都清楚搜索"小程序類目審核不通過"是為了找原因的,不會是為了找一家公司幫他開發小程序,人家可能都已經上線了,所以根本不會有人專門為這個詞做廣告。
其次:"小程序運營":
有廣告,看上去好像有商業價值,可問題是我們是做"程序開發"的外包公司百度關鍵詞擴展工具下載,運營我們不在行啊,根本不接這類需求,所以這個詞雖然有價值,但不是我們的業務范圍。
怎么辦呢?
感覺經常一篇上萬字,也不太助于理解消化,上述留下的問題我們在下一步的"查詞篇"再來討論,關于這個挖掘詞綴的方式,肯定也不僅僅是用在這個事情上。