作者: abaoyang

[Technique] tensorflow-gpu 安裝紀錄 (Windows Server 2016)

系統環境確認

  • Windows Server 2016
  • GeForce GTX 1070 Ti
  • Python 3.7
  • Visual Studio 2019

安裝步驟

1. 創建並啟用虛擬環境

> conda create -n tensorflow_gpu python=3.7
> conda activate tensorflow_gpu

2. 安裝正確版本的 tensorflow-gpu

> pip install tensorflow-gpu==2.1.0

3. 測試 tensorflow 能否成功連結至 GPU

> python
Python 3.7.7
>>> import tensorflow as tf
>>> tf.compat.v1.disable_eager_execution()
>>> hello = tf.constant('yo')
>>> sess = tf.compat.v1.Session()

【2020政大徵才月】資料分析學習路徑整理

職稱滿天飛,資料分析師、數據分析師、資料科學家、數據工程師、AI工程師、機器學習工程師…,我認為有一個光譜可由淺入深分類一下這些跟「數據」搭上邊的工作(例如 日常工作類型的比例是建立資料架構、清理資料、建模還是視覺呈現報告結果佔多數、會需要產業knowhow的比例多寡等等)。

不過這不是本篇的重點,本篇想針對資料分析入門到精通、到走向資料科學家或數據工程師、AI工程師,過程中的線上教材做歸類。我目前把它簡化成三個階段。
另外這樣的網路文章蠻多的,可以google「data analysis tutorial recommendation」肯定能找到更多無窮無盡的乾貨;不論你最後儲存了哪一篇,重要的是我們找到一篇覺得可以follow的開始學習囉!

Beginner: Data Analysis Concepts

初學重要目標:知道何謂商業上有意義的分析結果、如何從資料產出可視化圖表並做出適切解讀。

  1. 多吸收產業數據應用案例
    > FineReport — 
    一個案例告訴你,如何在工作中掌握商業資料分析的能力
    FineReport — 行業好文:4大案例分析金融行業的大數據應用
    Coursera大數據分析:商業應用與策略管理 | 台大開課
  2. 參考公開的數據可視化範例,了解如何精確使用圖表讓人知道數據中的故事
    > Hubspot — Data Visualization 101: How to Choose the Right Chart or Graph for Your Data (較進階,建議)
    不同圖表不同使用時機,我的報表適合什麼圖形?你用對了嗎?(非常基礎,當成一個檢查)
    數據可視化:柱狀圖、雷達圖等六種基本圖表的特點和適用場合
    Tableau Public — 可搜尋到其他人公開的視覺化Dashboard範例
  3. 自己抓取公開的數據集做可視化(視覺化)練習
    > Kaggle — 帶有主題的資料集,而且蠻多是直接提供csv,應該是最好用來練習
    阿里云天池 — 阿里云旗下大数据平台
    政府開放資料

Intermediate: Do Analysis with EXCEL/Python

中階重要目標:知道如何清理資料、做出符合商業目標的分析、可視化呈現並使用統計數據說服聽眾,完成這一整個flow。

  1. 從電子書或線上課紮實學習整個流程
    Introduction to Data Analysis HandBook(原文): 他會從資料類型、資料分析流程到跑一個實際案例給你看
    Digital Analytics for Marketing Professionals: Marketing Analytics in Practice | University of Illinois at Urbana-Champaign (4.5星,2209評分):也是從data collection到visualization跑一次案例給你看
    P.S. 推薦 課程比較網站 ClassCentral — 跨多個平台找課程時可以互相比較評價
  2. 透過EXCEL / Python 操作跑一遍analysis流程
    > Tutorialspoint 網站文章叢集教學 — Excel Data Analysis Tutorial
    > O’Reilly® — Think Stats: Exploratory Data Analysis in Python(原文)
  3. 學習更高階的分析方法
    DATA MINING AND ANALYSIS: Fundamental Concepts and Algorithms(原文) — 多變量分析、處理高維度資料、分類分群方法等(銜接機器學習方法)

*Data Analysis v.s. Data Mining 兩者差異,最主要定義上前者是指產出商業上有用insight的一連串步驟包含data extractingcleansing, transforming, modeling, visualization,後者則專指機器學習中從大量資料中找出pattern的系統化流程。source: 國外線上學習網站EDUCBA點出共7點差異

Advanced: Big Data Processing with SQL/Python

高階重要目標:學習其他串接資料技術,了解程式效能對資料處理的影響,並優化程式寫法。

因為真實世界的資料不是永遠都長得那麼工整,會包好一個csv丟給你;很多時候必須藉由網站爬蟲、從DB撈取等方式得到資料。使用Python的好處是能一條龍的完成資料撈取到視覺化過程,但EXCEL仍有他的優點,就是能非常省時的跑出統計分析、圖表報表。

  1. 學習SQL-like語言
    Data Analyst with SQL Server | Datacamp — 再自己弄一個DB可能有些麻煩,所以初學者我蠻推薦用Datacamp的互動式來學SQL
  2. 學習簡單Python爬蟲
    > 推薦大數學堂的YT視頻,他有帶很多類型的案例,包含從找html tag、找藏在network頁籤的api、解決需要登入的問題、防止爬蟲被機器人擋等
  3. 了解Python中資料處理function的效能,建議用法
    Writing Efficient Python Code | Datacamp
    Official Python Performance Tips — 官方有針對像是Sorting, Loop, Data Aggregation等舉例直覺用法 v.s. 更有效率的用法

【乾貨】品牌行銷九大輿情分析維度—iBuzz @NCCU MBA CEO論壇

前言

iBuzz (亞洲指標數位行銷顧問股份有限公司) 是台灣第一間做海外內自動化網路口碑輿情搜集系統,來分享的 CEO 黎榮章 學長 也是政大企家班的校友!

據網路資料,他們在台灣的網路環境蒐集輿情口碑資料的總頻道來源超過17,289個,涵蓋八大頻道類型(新聞、文章、論壇、部落格、維基與FB粉絲團、Youtube、PTT)
同時也有針對中國大陸的網路口碑資訊蒐集,採80/20原則抓各產業別TOP30的熱門網站,包含七大頻道來源(新聞、文章、論壇、部落格、維基、電商、微博),共12940個頻道。
東南亞部分包含新加坡、馬來西亞、印尼、越南、菲律賓、泰國等城市,來源包含傳統媒體和臉書、IG等社交平台。
他們不僅服務品牌直客,同時也跟奧美集團、群邑集團、電通安吉斯集團、聯廣集團等4A大型代理商、公關公司搭配,提供網路大數據分析社群行銷解決方案。

好的,認識完iBuzz讓我們進入主題!

品牌行銷九大分析維度

*P.S. / 當天無法拍照,以下圖表皆為模擬示意*

(I) 產業環境分析

ex:化妝品在不同季度的討論趨勢(用文字雲表示)

(II) 產業競爭分析

  1. 品牌討論度排名:同一產業內,約會有前3大品牌佔據80%的討論度。

2. 品牌與產品的聲量占比:大家普遍講到這個品牌的時候,是打他的品牌字or產品名多?

Ex: 精品業相較於日用品品牌占比較多
Ex: OPPO 產品討論大於品牌太多

2. 產品內 效能指標討論度:
與商品字一起出現、有關產品系統效能的名詞、評價

(III) 企業集團分析

  1. 品牌P/N比 (正負情緒比) :
    將每一篇提及企業品牌的文章算出正、負面分數各一,最後再計算總共的(正面情緒分數/負面情緒分數),數值越高、品牌好感度越高。

(IV) 品牌健康分析(品牌情緒象限)

  1. 4象限:正面、負面、強烈、輕微
  2. 分別對品牌有哪些關鍵字、個別是落在什麼情緒、討論量有多少

(V) 產品力分析 (SWOT)

應用點:以往,行銷人員透過觀察、資料蒐集、發想寫出SWOT分析象限;但總有些無法一眼觀察出的pattern,透過文字探勘可以為行銷人員做SWOT增添靈感。

  1. 產品使用情境->顧客痛點
    將多篇使用心得文,進行文本及情感分析,從詞頻及語意判斷顧客痛點。
  2. 斷詞後做相關性分析,哪些商品和情緒描述之間的相關度較高(EX: 在同篇文章出現)

(VI) 活動成效檢核:

從前中後流程追蹤成效

  1. 活動宣傳
    線上投放
    自媒體經營
  2. 活動報名
    個人化資料
  3. 活動報到
    個人身份辨識
  4. 活動體驗

(VII) 廣告效果檢驗&優化

廣告投放前後監測:

  1. 各大主要論壇,投放前後、討論詞頻的變化(說服效果分析)
    適用於品牌曝光、促進知名度的廣告類型,可了解投放後,增加了多少與品牌主相關的討論。

廣告優化:

  1. 作為後續廣告素材的主題參考
    觀察討論集中在什麼熱詞,有可能是文案一開始並沒有強調到的
    ,此時就可以丟新一版廣告文案做A/B Test,看CTR是否增加。
  2. 聯播網內容相關:文章內容有出現關鍵詞才播送廣告
    在Google Ads可設定「多媒體廣告關鍵字」,讓廣告只出現在 「包含你設定的關鍵字」的網頁、影片、應用程式。
    如果我們發現廣告CTR不如預期,可以嘗試在多媒體廣告關鍵字,鎖定文字探勘得到的熱詞。但不宜鎖得太細,以免曝光量過少。

(VIII) 議題事件分析

  1. 聲量:提及次數、隨時間變化圖
  2. 來源占比:初次出現在不同內容平台的占比
  3. 擴散:隨時間擴散的平台分佈
  4. 隨時間變化的熱詞及正負面情緒

(IX) 消費者

資料來源不包含年齡、ip等資訊時,若要判斷受眾輪廓該怎麼做呢?

  1. 人口結構分析
    從用語回推 年齡、性別、區域等。(例如:會講「是在哈囉」的人,大概率落在14~21、說坐機捷通勤的人,大概率住在新北三重、新莊、林口、泰山)
  2. 生活型態
    透過語意反推 意見、興趣、休閒活動。(同上,例如:會講「高效學習」的人,大概率是互聯網產業、白領、喜歡閱讀)
  3. 人物性格分析
    文本分析 明星粉專、IG、微博日常發文用語、機器學習辨識圖像風格(穿搭風格),將微網紅分成多個大類別(如:文青、可愛、運動、嘻哈、知性、甲甲、憤青、專業權威感…等)
    方便迅速找到適合品牌主的網紅、代言人。

趨勢:圖像辨識 分析社群話題

用戶越來越習慣在 FB、IG 等社群平台分享梗圖短影片,文字探勘能抓到的比例不斷下降;說到因應方式,iBuzz舉例內部做的「反送中」議題IG分析,找出:

  • 社群流傳度前五名傳播梗圖/照片
    透過解析圖片風格、圖中文字來訓練分類器
  • 初期發布者、中晚期擴散用戶群

文末補充

這次iBuzz演講的主題—大數據輿情分析,就像開頭提過的,是從新聞、文章、論壇、部落格、維基與FB粉絲團、Youtube、PTT等來源,系統化蒐集整理口碑資料的過程。這邊整理台灣做輿情分析的重點公司,以及自己想要操刀可以用什麼工具?

輿情分析公司:

開源輿情分析工具:

【資料分析概念大全|認識文本分析】給我一段話,我告訴你重點在哪:對文本重點字詞加權的TF-IDF方法

適逢上週五2019數位奇點獎,敝公司獲得【最佳數據科技創新獎】銅獎;當中的案件我們使用到tfidf產生的文本向量做KMeans分群。正好想試試再讓文章簡單好懂一點,本周就單純只介紹這個文本分析很常用到的統計方法:TF-IDF。

一句話解釋TF-IDF——用來從一段文字/一個語料庫中,給越重要的字詞/文檔,越高的加權分數
本篇文章共三段,第一段講述概念與公式,第二段帶一個簡單的script印出一句話的tfidf稀疏矩陣,最後第三段提及TF-IDF的限制和改進。

預計閱讀時間:5–8 mins。

概念解釋

你看,TF – IDF ,前面的TFTerm Frequency的縮寫,後面的IDFInverse Document Frequency的縮寫,合在一起則說明了它如何計算出誰是相對比較重要的字詞——字詞的重要性隨著 在文本出現的頻率越高則越高;在不同文本檔案間出現的次數越高則反而降低
所以聰明的你會猜得到,它由兩個公式組成:

1. TF (Term Frequency) 詞頻

我們先把拆解出來的每個詞在各檔案出現的次數,一一列出,組成矩陣。接著當我們要把這個矩陣中,『詞1』在『文件1』的TF值算出來時,我們是用『詞1在文件1出現的次數』除以『文件1中所有詞出現次數的總和(可說是總字數)』
如此一來,我們才能在不同長度的文章間比較字詞的出現頻率。

2. IDF (Inverse Document Frequency) 逆向檔案頻率

如果經過第1步的計算,此時我們有兩個詞頻一樣的字詞,還有什麼變數影響他們可能更重要 或 不重要?

如果有一個詞事實上很常出現在不同文章內,那即使該字詞的頻率很高,它是不是不足以代表這篇文章? 拿藝人上電視節目舉例,如果藝人A和藝人B上X視節目的次數相同;但藝人A只上X視節目,藝人B還會出現在X立、X大的節目,對X視節目來說,最具代表性的還是藝人A,而不是有可能在X立、X大上過更多次節目的藝人B。

所以我們這裡再用IDF,計算該詞的「代表性」。
由『文章數總和』除以『該字詞出現過的文章篇數』後,取log值*。實際應用中為了避免分母=0,因此通常分母會是dt+1。

*注:
IDF之所以取log的原因,有過多篇論文討論。把「詞在所有文章出現的篇數」想成「要從這些文章中,隨機抽一篇能夠抽到包含該詞的文章的『機率』有多少」;也就是這個詞在這些文章中被找到的機率分布。

另一個原因是,如果不取log,比方說總數是100000篇文章,如果因為拼錯字導致此詞僅有1篇出現過,TF-IDF最後給這詞的加權會出現太大的值,使得線性加權方式反而表現得沒那麼好。

綜合兩個公式值相乘,便得到我們今天介紹的TF-IDF值:

程式實作

結束前,我們用scikit-learn 提供的CountVectorizer, TfidfTransformer來試著對多個句子產生tfidf值矩陣。(*注意:要經過斷詞處理後再做tfidf)

另外值得一提的是,如果是英文文本實作tfidf,通常還會需要詞型還原 Stemming(譬如:teach / taught,理當視為同義,不可以讓tfidf算成兩種詞),因為有文法時態、單複數的問題。

1. 引入套件

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
import jieba
jieba.set_dictionary('../../zh-TW_dict/dict.txt.big.txt') # 使用官方的繁體詞典

2. 再額外設定停用字符

stopword_list_ch = pd.read_csv('../../zh-TW_dict/stopwords.csv')
stopword_list_ch = list(stopword_list_ch['$'].values)
manual_stop_list = [',','.','*',':',';','#','@','!','%','^','&','+','=','~','『 ','\\n','{','}','-','|','(',')',',','˙','..','/','...','$','\r','\n','\t',' ','\r\n','▼','|','【','】','[',']','「','」','★','▎','↘','◤']
for w in manual_stop_list:
    stopword_list_ch.append(w)
stopword_list_ch

3. 處理文章資料

df_article = pd.read_csv('your_file.csv')jieba_results = []
for sent in df_article.sentences:
    w_string = str()
    ws = jieba.cut(sent, cut_all=False) # 精確模式
    for w in ws:
        if w not in stopword_list_ch:
            w_string += w + ' '
    jieba_results.append(w_string)df_article['sent_jieba'] = jieba_results

4. 基本tfidf script

vectorizer = CountVectorizer(stop_words = manual_stop_list)
transformer = TfidfTransformer()
X = vectorizer.fit_transform(df_article.sent_jieba)
tfidf = transformer.fit_transform(X)
weight = tfidf.toarray()

5. 檢視結果

print(weight.shape)
print(tfidf[0])
print(weight[0])

這邊我們先拿前5個句子來測試,所以你會看到weight.shape是(5, 39),它是指有5列、39行的矩陣構成;一列就是一個句子,39行是指這5句裡所有出現過的不重複字詞共有39個。矩陣裡的數值就是這39個詞,在這5句中的tfidf值。

*tfidf的output因為是個sparse matrix(稀疏矩陣,未來我們有機會講到),tfidf.toarray() 可轉換成2-dimensional ndarray的形式。

tfidf[0]是指,第1句的tfidf稀疏矩陣,紀錄第幾列、第幾行的非零值是多少。weight[0]則完整印出39個詞在第一句中的tfidf值,0則代表這詞沒出現在第一句。

你可以想像,如果我們對每一句做完tfidf值,這樣的矩陣代表我所有的詞庫中,誰對哪篇文章有加權到;所以如果有兩篇文章的tfidf矩陣非零的位置一樣,則這兩篇加權到的字詞一致,表示這兩篇文章意思可能更相近。

TF-IDF的限制及改進方向

TF-IDF是個相對構成簡單的算法,有一些情境下它會誤判特徵詞的重要度:

  1. 語料庫中剛好都是同類文章,此時具代表性的字詞反而不被加權
    譬如:都是講行銷的文章一起放到語料庫被訓練,因為幾乎每一篇都提到『數位行銷』,最後結果出來,『數位行銷』的IDF值反而比『客戶』、『用戶』之類的詞更低。若使用TF-IDF方法,要注意語料庫的挑選。
  2. TF-IDF無法考慮到位置訊息。如果你的情況是 文章標題、文章第一句或文章結尾提到其實代表這個詞更重要,此時用TF-IDF就無法參考到詞在文章中的位置訊息。

針對第一點,網路有文章提出了「TF-IWF」,以及「TF-DFIDFO」兩種改善方法。

TF-IWF 詞語逆頻率加權

TF的部分不變,差別在IWF值算法改成:

分子:整個語料庫中所有字詞的總頻次(總字詞數)
分母:該字詞在 整個語料庫中 出現的總次數
(簡單說,就是從指參考一篇文章,改成參考整個語料庫(所有文章))

改進優點:
避免當語料庫中有高比例的同類別文章時,重要特徵詞的權重沒有被提升到。

TF-DFIDFO 類別頻率加權

DFI是指「同類別內的分布情況」、DFO則是指「類別間的分布情況」。

網路上只有一篇中國研究講到TF-DFIDFO,照著研究意思先把公式編輯下來,未來有機會再深入理解

改進優點:
增強對”類別”的區分力。

資料來源:
TF-IDF for document ranking from scratch in Python on real world dataset
tf-idf 算法中idf为何使用对数?直接用比值或者其他函数不行吗
TF-IDF模型的概率解释
TF-IDF之极简化信息论分析
TF-IDF存在的問題及其改進
特征加权之TFIWF
改进的TF-IDF中文本特征词加权算法研究

好的,以上就是本周 Python 文本分析的連載。
前段是自己的理解+基本定義、後段限制和改進的部分,是網路資料的回溯歸納。
有問題歡迎留言詢問,看到我會盡力回答的。

【資料分析概念大全|認識文本分析】Word2Vec, Doc2Vec 比較 (附Python程式碼)

本篇筆記 Python自然語言處理入門的常用方法 Word2Vec,及其延伸:Doc2Vec,表述他們之間的關聯,並以Python實作比較不同方法分辨同樣兩個語句的效果。(介於中間的還有Sent2Vec,概念與Doc2Vec相似)

Word2Vec是什麼?

顧名思義 Word to vector,通過神經網路訓練,將字詞表示成空間中的向量,讓我們可以用向量間的距離,來代表文本語意上的相似程度。這種把字詞向量化的概念即稱為 “embedding”,目的是讓機器理解人類用的詞語,把符號數學化。

那怎麼做到”讓語意相近的字詞向量越靠近”?

Word2Vec主要由兩種神經網絡演算法構成:

圖片來源:https://www.researchgate.net/figure/Architecture-of-Word2Vec-models-CBOW-and-Skip-Gram_fig3_328373466

1. CBOW (Continuous Bag of Words):根據上下文關係,預測當前詞語出現的機率。利用所有input data(語料庫)中,每個(經過斷詞後)的上下文詞語組合,預測目標字詞本身出現的機率有多少。圖中的w是每個詞的權重矩陣(訓練完成後會就是該詞的詞向量),CBOW模型的目的是讓當前字詞(要被預測的對象)的出現機率越高越好。

譬如:[‘感冒’, ‘要’, ‘多’, ‘休息’], [‘生病’, ‘要’, ‘多’, ‘休息’]
假設語料庫輸入大多是跟生病休養相關的語句,此時模型就可以判斷上下文關係,學習到 ‘感冒’ 和 ‘生病’ 的語意是相近的,最後算出的cos(餘弦值)也會越大(空間中兩向量越靠近)。

2. Skip-gram:CBOW的相反,根據當前詞語預測上下文詞語的機率

那Doc2Vec是…

模型能夠判斷單詞間的語意相近程度了,那進一步我們想要知道,詞語組合成的「段落」間的相近程度是如何。

我們有一個選擇,可以將Word2Vec算出的詞向量相加做平均處理,來代表這些詞組成的一段段落的向量;但是這樣就沒有考慮到字詞的先後順序,以及上下文關係,而且段落長度可能相差非常多。
於是Word2Vec論文作者 Tomas Mikolov 再延伸提出了 Doc2Vec方法,比起直接將字詞相加,Doc2Vec考慮字詞先後順序後算出代表一語句段落的向量。

那如何做到讓模型”參考到字詞順序及上下文關係”?

Doc2Vec跟Word2Vec有異曲同工之妙,這兩種神經網絡演算法其實跟Word2Vec很類似:

圖片來源: https://link.springer.com/chapter/10.1007/978-3-319-66808-6_16
  1. PV-DM (Paragraph Vector – Distributed Memory)
    跟CBOW很像,只是多了paragraph_id (會先映射成一paragraph vector)。訓練過程中 paragraph_id跟詞一樣保持不變、參與每個詞的訓練,待每個詞都被訓練到以後,也會獲得一個代表這段文檔的向量(文檔權重D)。
  2. PV-DBOW (Paragraph Vector – Distributed Bag-of-words)
    跟Skip-gram很像,使用文檔權重矩陣來預測每個詞出現的機率。

[實作] 2個相同句子,用Word2Vec單詞向量相加 v.s. Doc2Vec.infer_vector ,對相似度判斷的效果

使用商周部分網站文章,涵蓋 良醫健康網Smart自學網商周財富網,爬取標題、經jieba斷詞處理,並將同一訪客曾瀏覽過的斷詞紀錄接在一起,產生如左圖的dataframe:(示意)

(1) 引入所需套件及設定:

import nltk
nltk.download('punkt')
from nltk.corpus import stopwords
from nltk.tokenize import sent_tokenize, word_tokenize
from gensim.models import Word2Vec
from gensim.models.doc2vec import Doc2Vec, TaggedDocumentimport numpy as np
import pandas as pd
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"  # 顯示所有output
import warnings
warnings.filterwarnings('ignore')

(2) 放入Word2Vec及Doc2Vec模型前 的資料處理:

stopword_list_ch = pd.read_csv('stopwords.csv') #中文停用字
stopword_list_ch = list(stopword_list_ch['$'].values)
manual_stop_list = [',','『 ','\\n','{','}','-','|','(',')',',','˙','..','/','...']
for w in manual_stop_list:
   stopword_list_ch.append(w)
# Word2Vec: 將上面的斷詞資料 依空格切割 包成Word2Vec model的input格式
input_w2v = []
for i in range(len(raw_file)):
    input_w2v.append(raw_file.allTitleByUser[i].split(' '))# Doc2Vec: TaggedDocument
no_nan_words_file = raw_file.fillna('')
tagged_jieba = [
    TaggedDocument(
        words=[w for w in word_tokenize(p) if not w in stopword_list_ch], tags=[i]) for i,p in enumerate(no_nan_words_file.allTitleByUser
    )
]

(3) Train 簡易Model:

# Word2Vec
model_w2v = Word2Vec(input_w2v, size=300)
model_w2v.save('test_word2vec.model')
print('W2V model saved!')# Doc2Vec
model_d2v = Doc2Vec(tagged_jieba,
                size=20,
                alpha=0.025,
                min_alpha=0.00025,
                min_count=5,
                dm=1)
# dm=1 : ‘distributed memory’ (PV-DM) ; dm =0 : ‘distributed bag of words’ (PV-DBOW)model_d2v.train(tagged_jieba,
            total_examples=model.corpus_count,
            epochs=20)model_d2v.save('test_doc2vec.model')
print('D2V model saved!')

(4) 產生範例句段之向量:

# Word2Vec
model_w2v = Word2Vec.load('test_word2vec.model')exp_sent_1 = ['台股', 'ETF', '安心', '存', '年輕人', '買', '0050', '退休族', '買', '0056']
exp_sent_2 = ['投資', '三', '步驟', '小資女', '艾蜜莉', '超', '完整', '解答']vec_sent_1_w2v = np.zeros(300)
vec_sent_2_w2v = np.zeros(300)
for w in exp_sent_1:
    vec_sent_1_w2v += model_w2v[w]
print(vec_sent_1_w2v)
for w in exp_sent_2:
    vec_sent_2_w2v += model_w2v[w]
print(vec_sent_2_w2v)# Doc2Vec
model_d2v = Doc2Vec.load('test_doc2vec.model')
exp_sent_1_doc = word_tokenize('台股 ETF 安心 存 年輕人 買 0050 退休族 買 0056')
exp_sent_2_doc = word_tokenize('投資 三 步驟 小資女 艾蜜莉 超 完整 解答')
vec_sent_1_d2v = model_d2v.infer_vector(exp_sent_1_doc)
print(vec_sent_1_d2v)
vec_sent_2_d2v = model_d2v.infer_vector(exp_sent_2_doc)
print(vec_sent_2_d2v)

(5) 計算Cosine Similarity:量化呈現,向量在空間中的距離有多近?
by 歐式距離可推導出Cos夾角公式,1表完全同向,0表相互獨立,-1表完全不同向。

圖片來源: https://zhuanlan.zhihu.com/p/36179431
w2v_similarity = np.dot(vec_sent_1_w2v, vec_sent_2_w2v) / (np.linalg.norm(vec_sent_1_w2v)*np.linalg.norm(vec_sent_2_w2v))
print('similarity of Word2Vec+: ', w2v_similarity)d2v_similarity = np.dot(vec_sent_1_d2v, vec_sent_2_d2v) / (np.linalg.norm(vec_sent_1_d2v)*np.linalg.norm(vec_sent_2_d2v))
print('similarity of Doc2Vec: ', d2v_similarity)

計算結果:Doc2Vec向量的距離算出兩句之間的相似度比Word2Vec得出結果更高。兩句都是投資相關,若是分類目的,相似度確實越高越好;但因為兩句講述的主題稍有不同(ETF v.s. 艾蜜莉投資教學) ,我們不能說0.47的相似度就是最正確。

反省出更好的測試方式是,可以拿語序相反就有不同意思的句子,應該會更明顯看出兩種word-embedding方法,判斷相似度的差異。

參考資料:
1. 【演算法】word2vec與doc2vec模型:http://www.ipshop.xyz/9903.html
2. 一周論文 | Word2Vec 作者Tomas Mikolov 的三篇代表作:https://kknews.cc/zh-tw/news/69j4am.html
3. 深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析:https://blog.csdn.net/mpk_no1/article/details/72458003
4. Word2Vec基礎實作參考:以 gensim 訓練中文詞向量http://zake7749.github.io/2016/08/28/word2vec-with-gensim/

【資料分析概念大全|認識統計顯著性】A/B Testing 觀測數值增減多少才是顯著有效?

前言

不論是廣告投放或行銷中的A/B Test,對結果的評斷和優化,都是數據分析的環節之一。避免看到數字就憑著主觀解讀,而是設法找尋具科學證據的解釋,也是數據分析師的基本素養。 本文介紹A/B Testing觀測結果的統計顯著性,期待你除了會使用線上免費工具計算實驗的顯著性之外,也能了解背後統計概念。

A/B Testing做完後對結果的評估,其中一個重要的檢查點:「多少的數值增減才是顯著有效」? 所謂的「顯著有效」,可以理解成,多大的變動才能確保它不是誤差所造成的

當我們拿實驗的前後數值比較時,我們比的其實是 實驗前後、某段區間的抽樣估計差異;當我們對一個群體數據做抽樣、用均值表示它的估計值時,此刻就容易因為我們取的區間不同而有誤差。所以我們需要用一個誤差值確保,我的估計值有xx%的信心會落在這個正負範圍;它如果落在此範圍表示 有可能是抽樣誤差所造成的數值增減,並不是你的A/B Testing有顯著效果

而背後統計顯著性的算法,是如何決定出範圍的呢?這就牽涉到所謂的區間估計

區間估計

區間估計 = 對單點的估計值 ± 抽樣誤差

具體的做法步驟如下:

(1) 訂出A/B Test前後的樣本統計量,譬如:測試前一周的平均值、測試後一周的平均值(對單點的估計值

(2) 從上述數值中計算出抽樣誤差

*常態分佈下,有95%的z值會落在-1.96~+1.96之間

(3) 點估計加減後抽樣誤差後,得到該時段的區間估計範圍

n:觀測值總數,p:點估計的結果

範例:
我們想要知道A/B Testing前後的轉換率是否顯著上升
測試前一周的總連結點擊為3738、轉換次數為52,測試後一周的總連結點擊為4092、轉換次數為66。

(1) 計算出前一周估計轉換率為1.3911%,A/B Testing後一周的估計轉換率為1.4663%。

(2) 前一周的抽樣誤差為 0.3753%:

後一周的抽樣誤差為 0.3687%:

(3) 前一周的區間估計為 (1.0147%, 1.7653%)

後一周的區間估計為 (1.1013%, 1.8387%)

結論】
後一周的點估計轉換率,落在前一周的抽樣誤差區間估計內;表示此實驗造成的轉換率提升不顯著。
因為有可能後一周結果只是前一周的抽樣誤差所造成,跟A/B Testing所做的優化無關。

假設檢驗:p value

再更精確的假設檢驗方法,我們會使用到z值分布表以及p value
首先我們假設『A/B Test 後一周與前一周的轉換率沒有顯著差異』
若計算p value小於0.05,我們認為此事件幾乎不可能發生,表原假設錯誤,即為 有顯著差異;反之亦然。
公式如下:

1代表前一周、2代表後一周

(1) 首先我們將上述範例數字代入:

(2) 得出z score = 0.298 ~ -0.30此時z值介於-1.96~+1.96之間,屬於95%可能發生的情況z值對照常態分佈z值的分布表:

得出 p value = (1–0.6179) = 0.3821 > 0.05,表原假設為真 — — A/B Testing後的轉換率上升,統計上並不顯著有效。

快速檢驗A/B Testing顯著性

知道不是每個人都對統計有興趣,最重要的是有依據對數據做出正確判斷。目前線上有許多網站都開放A/B Testing Significance 檢測的工具,像VWO網站免費提供A/B Split Test Significance Calculator,讓你了解多少的數據變動才算顯著有效。

下次如果要回報優化結果給客戶,又覺得數值的增長不是很大幅時,不妨算算看優化造成的變動是否統計顯著!而且了解背後統計概念,在說服客戶時也能增加你的專業形象唷:)

【資料分析靈感|書摘精華】Sexy Little Number — 用數據找到潛在客戶:行銷預算分配背後的科學邏輯?

在乙丙方* 服務久了,有時候只為了讓客戶提供更多的預算,而忘了究竟花多少才會給到客戶最佳狀態的成效:再多花費只會增加轉換成本、再少花費就會掉單的情況。

*註:廣代的甲方通常指客戶、乙丙方是媒體操作、整合行銷的外包商。乙方通常是整合規劃(相對上游)、丙方則是從乙方再專精外包其中1–2項。

說起來也合理,傳統的乙丙方靠這個營利,這個生態久而久之品牌主們也慢慢接受,都心知肚明你其實多少從預算留了一些毛利下來。
數位投放商還算得比較精,會說我們收預算的20%服務費,但”厲害”的投放商可以壓成本,預算不會真的花完;
傳統廣代依據服務項目直接收費,也不會有人去精算成效跟投入的報酬率對客戶是否最佳;辦一場PR的收費,跟知名度的增加、到漏斗最下層轉換銷售,真的有發揮符合收費比例的效益嗎?

以下提及概念為書中+自己搜尋資料理解後重述:

「三十多年前」,著名的英國克蘭菲爾德大學管理學院,有一篇出自《克蘭菲爾德報》的文章,列出了以下決定預算多寡的方式:(原有15種,已將比較相近的整理成同一個方法)

  1. 直覺/黃金法則:依照過往經驗、用經理人的直覺決定

  2. 根據銷售百分比的成長,增加的多給、減少的少花一些

  3. 用上一波投放所獲的利潤(前提要做到完善追蹤)

  4. 事先估計單次銷售所需的固定成本,根據要成長的銷售量乘出總預算

  5. 設定預算為銷售額的某個百分比

  6. 與競爭對手成比例
    (代理商問得到競品花費前提是沒有造假、或用流量工具估競品網站流量的成長幅度(但免費版工具的數據有的也只是估計值))

  7. 依據希望達到的市占率,估算必須占整個市場的廣告預算的比例
    (可行性疑問:整個市場的預算從何得知?)

  8. 媒體權重測試:測不同地區/客群,在於要分配預算的媒體間的效果;比較好的預算比例增加
    (缺點:測完一波預算也花完了)

除了新創公司必須要將預算精簡再精簡,一般中大型公司在規畫預算時,很可能依然停留在經驗法則、或固定成本、銷售額百分比等計算方式。
對於有做轉換追蹤的公司,可能很快會發現哪些預算分配方式有效、哪些ROI不如預期;不過開頭都說了「三十多年前」,除了以上方式,有沒有更科學一點、更讓我們靠近最佳化成果的方式呢?

【支出/獲利曲線】

「哈哈哈,這什麼簡單的圖,想騙我XD」你一定想說這不就是,會在廣告後台預估區塊會看到的,支出越高,邊際報酬越遞減嗎。我一開始看這個章節也是這樣想。

先講一下為什麼,廣告花費越高,邊際報酬遞減。
實際上在花費行銷預算的時候,(這邊用投放廣告的預算和得到的收益來舉例)
假設依據花費進度不斷提高日預算,優化(盡可能增加轉換數或降CPA)一陣子後,會有兩個情形:
一個是即使不設出價上限,也花不完你開的預算上限(能獲得的轉換數有上限),
一個是觀察到轉換數落在一個範圍內,再往上加預算,轉換成本變高但是轉換數沒有等比增加。

這代表一件事:你的受眾群裡面,在你目前廣告目標之下(可能是增加轉換數、觀看次數、私訊人數…)會完成事件的人數,必定有一個上限,這個上限不是加預算就可以打破而是要「更新」目前受眾群裡的人,讓更多受眾趨向於會完成你預設事件的人。
EX: 打轉換的同時,增加打按讚數的廣告,讓你的粉絲群固定增加,並且設定有對貼文互動的人進入打轉換的範圍;這樣你的轉換受眾是有不斷更新的,才不會是在同一群人裡硬撈轉換。

好,回到行銷預算規劃,所以這個支出/獲利曲線,要怎麼用在決定預算上?

  1. 它是多項式曲線,可能是 Y=AX⁴+BX³+CX²+DX+E 這樣的一個關係式,假設Y代表網站訂單量,那麼A/B/C/D/E代表的可能是價格、文案、網站體驗等多個因素,配上不同的強弱關係(以X次方數為例),組成一個回歸關係式決定使用者進站後下訂單數量(機率)。

  2. 對品牌主最大的價值在於找到「使我網站投報率(斜率)最大」的點落在哪邊?或是預期的轉換量,以現在的曲線看起來,是否可以接受那樣的邊際效益?

  3. 如何劃出自家的預估曲線?
    有資料的狀況下,灌入價格、網頁跳出率、廣告點閱率等指標,找這些指標和最終訂單量的關係,fit出回歸曲線。
    沒有足夠資料的狀況下,勉強用4個假設值來定位曲線:
    • 成果最小值-如果不花任何行銷預算,會有多少人下訂單?(0, C1)
    • 成果最大值-如果完全沒有預算上限,最多有多少人會下訂單?(N, C2)(也可用公司5年後長期目標來當假設)
    • 目前成果值-現在實際的行銷預算和訂單量是多少?(X, Y)
    • 邊際比率-依照現在投放的效果,增加/減少預算的量,和訂單數的變化,比例是多少?
      (建議可以用現在的「平均轉換成本」當做級距,去看歷史投放紀錄,在不同預算級距的情況下的轉換成本是多少)
      • 假設在0–10美金的預算下,多花9美金可以多一訂單,邊際比率=0.111單/每+1鎂
      • 10–20鎂預算時,多花9.6鎂可多一訂單,邊際比率=0.104單/每+1鎂。以此類推,才符合曲線斜率變動的情形。這也是我思考後覺得比較貼近真實曲線的做法)
  4. 需要分配的原因在於,各個媒體渠道/地區的成果最大/最小值、邊際比率不同,透過細分渠道/地區,依照上述的方法畫出各自的曲線、找斜率最大的點,訂出每個渠道/地區最佳化的轉換數最多是多少,用這個比例來分配預算,應會比渠道成長百分比更精確。
    (畢竟每個渠道的起始點不同,有的渠道不花費還是能有較多轉換數譬如社群平台、有的受限於被動搜尋譬如關鍵字、購物廣告,較容易達到轉換量上限…,因此使用假設值的方法,必須要有對「分配維度(上面說的渠道或地區或其他分類)」熟悉的人來給出假設值,才有意義)
  5. 假設我的長遠目標想要的轉換數,在現在曲線下是邊際效益趨近於0的,要怎麼提高邊際效益去做到那樣的轉換數,而不是真的把預算繼續加上去?
    >> 這個就用到前面講到,打轉換的同時也打按讚粉絲廣告的概念。
    這件事要先自我質疑,請問加上打按讚粉絲廣告之後我花的錢,是不是跟直接全部加在轉換廣告一樣多?XD是的話沒有意義對吧
    • 按讚粉絲的漏斗位置是好感度,轉換廣告的漏斗位置在最後一層,這兩層的轉換率是你需要透過小量測試知道的;X個粉絲增加,會出現一個訂單,每個粉絲Y元成本,你的購買邊際比率=1/XY,是否比加上去預算級距的邊際比率低?
    • 當你小量一起投放的時候,轉換廣告的單次成本降低了多少?等於曲線往左移動的量(消費支出減少、同樣的錢買到更多轉換)

[XChange 內訓筆記] MySQL | Lesson 0: Installation & Permission

Installation

  1. 透過 sudo yam
    • 此時會先check root password
  2. 透過 docker
    • $ docker images
    • 開啟 一個container,在那邊啟動MySQL (Data 就會存在 container 底下資料夾)
    • 如果本機端要access 需連到 33060 port 、或是將 container下的資料夾連動到本機端、就可以在本機看到 data
  3. 使用 Homebrew 安裝

Permissions

– 各項動作(權限)
– Query cache:為了讓查詢更有效率、MySQL會記憶以前跑過的Query;但為了檢查有沒有寫錯、跑之前會先清掉 query cache

連線到MySQL

$ mysql -u root -p
Password: *********
mysql> 

連線成功後

mysql> SHOW DATABASES; //可看到目前所有 db
mysql> USE mysql; //進入 mysql 這個預設內建 db
mysql> SHOW TABLES; //可看到 mysql 這個 db 下所有資料表
mysql> SELECT User, host FROM user; //對 user 這張資料表進行查詢

如何查詢指定 user 的權限

mysql> SHOW GRANTS 'root'@'localhost'; //可查詢 root 在 localhost 所被賦予的權限

用到的指令集:
https://dev.mysql.com/doc/mysql-getting-started/en/

補充

ACID (關聯式DB比非關聯式DB的優點)
http://www.notedeep.com/note/38/page/214

電通安吉斯集團-安索帕 Isobar 暑期實習

大致來說,我覺得一段經驗中,最值得分享的是兩件事:
一個是別人常常以為,但事實上不一定是這樣的;
另一個是我們過往以為清楚自己的模樣,卻因為這段經驗發現自己的另一面。

簡介公司及實習期間做的事

Isobar,全名「知世.安索帕」。隸屬電通安吉斯集團(Dentsu Aegis Network)旗下品牌,提供數位行銷的全方位解決方案。我在傳播企劃部和媒體部擔任跨部門實習生。

特別感謝公司先讓我和各部門主管面談後,還給了我選擇跨部門的機會。過程中參與到Uniqlo、黑松沙士的research和提案階段、匯豐銀行的DDC(Data Driven Creative)策略發想、正義聯盟、氣象戰兩部電影的行銷提案規劃,以及獨立完成公司內部針對90後數位行為研究分享。

Read More

【理性與感性兼具的代表-成長黑客】核心觀念及操作方法整理 (I)-初期獲取用戶

tags:  Growth MarTech 
圖片來源:The Kapost Blog《The Art & Science of Content Marketing (Infographic)》

本文為書摘+個人研究心得,書摘部分改寫自《GROWTH HACKER 增長黑客:創業公司的用戶收入增長祕笈》,個人研究部分則加上網路新創故事、專家建議,和筆者累積的一點行銷經驗、思考問題的脈絡。是篇不懶人長文,真心想深入了解得花點時間;文末蒐集了實用工具包彩蛋,請耐心服用

本文大綱:


2012年這詞兒剛火起來,直到2015年台灣的鄭伊廷(xdite)大大的「GrowthSchool」開了系列課程、慕課也相繼推出;現在已經四處可見各類Growth Hacking工具的教學課程和文章。

成長黑客一詞似乎默默的隱身在各種「流量分析術」、「廣告投放教戰」背後;會不會我們不經意忽略了——工具並非核心,成長黑客的思維才是。
所謂核心,就不能不來好好聊一聊「AARRR轉化漏斗模型」。

Read More
Close Bitnami banner
Bitnami