# 帳號分析 Hierarchical Clustering_20.11.20
## 資料預處理
將原本資料無法協助分析的 空格 emoji 標點符號 非中英數文字 透過正則表示式 drop 掉


## 肉眼檢視可能相似的帳號





## Question
**1.廠商允許重複的nickname?**

## 將字串與數字切開
ex: dog99 = 'dog','9','9'
分別用 word2vec embedding 後再相加當作最終 embedding 值
流程:
* drop 空值
* sort
* 取 500 筆
* embedding
* training and visualization
### 效果
* 相同的找的出來(但不乾淨)

* 類似帳號找得出來(但不完全)


# Update(20/11/27)
* 將英文後的數字忽略不 embedding => 'dog99' = 'dog'
## index[50500:51000] ; epoch:5 ; linkage method='average'
* 可以分出 w, x, y, z 四大群
* 'yopak201~2' 與 'yopak202~8' 不同群且很遠


* 其他表現不錯

## index[41500:42000] ; epoch:5 ; linkage method='average'


---
### ● 先排序再進去 train (word2vec 依前後給向量)
## index[41500:42000] ; epoch:100 ; linkage method='average'
file_name: result_201127_0100.svg

## Question
### word2vec 困境
判斷相似度需要讓 model 看過所有字,公司新增帳號,就重 train ?
### 透過分群找到大群,群內資料都是完全相同的
先 drop 重複的? (透過相同nickname 洗帳號?)
### word2vec 找最相像的 10 個效果不好

# Update(20/12/02)
## 上次問題解答
* word2vec 困境:判斷相似度需要讓 model 看過所有字,公司新增帳號,就重 train ?
+ 就重 train (ex:每月資料 train 一個 model 找可疑帳號進一步追蹤)
* 透過分群找到大群,群內資料都是完全相同的: 先 drop 重複的? (透過相同nickname 洗帳號?)
+ 不 drop 掉重複的,可以帳號通常會是流水號
## 改變點
不使用 Word2Vec 改將每個字母的 ASCII 存成陣列去做比較

* **註: padding (用 0)到長度為 15**

## index[41500:42000] ; epoch:5 ; linkage method='average'



相似帳號及流水號都會被歸類在同一群,效果不錯
# Update(20/12/09)
## vector 距離計算方式
```
sch.linkage(ordArr,metric='euclidean',method='average')
```
* euclidean(歐式距離)


* cosine


結果: result_201208_0702(尚可,沒有 euclidean 好)
### Cosine vs Euclidean 比較
舉例,`C`與`CC`理應為同一群,但Cosine將其歸類在不同群,而Euclidean有將其歸類在同一群。
#### Cosine


#### Euclidean

* cityblock

結果: result_201208_0708(尚可,同樣長度比較容易抓在一起
##### 資料: https://www.aiuai.cn/aifarm1390.html
## 實測時間
* 500 筆 : 0:12.159019 figsize=(200,50)
* 1000 筆 : 0:27.070813 figsize=(400,100)
* 10000 筆 : 3:088584 figsize=(500,300)
## 實測 10000 筆 data
```
(sch.linkage(ordArr,metric='euclidean',method='average'))
(index[30000:40000] ; linkage method='average')
```
結果: result_201208_0759




##### 資料:https://haojunsui.github.io/2016/07/16/scipy-hac/
###### tags: `Progress Report` `Account Analysis`