# 以人工智慧與社群網路進行理賠異常偵測 第一階段 視覺化網站 技術報告
## 摘要
為協助防犯人員更有效地瀏覽可疑案件及相關人員的過去歷史資料,我們建立了視覺化網頁,從原始資料建構出犯防人員容易掌握的網路結構,並透過前端視覺化的技術,清晰地供人員瀏覽。
## 內容
### 環境設置
* Docker image 安裝後端所需套件 (包含MySQL資料庫及Flask Server)
* Flask
* SQLAlchemy
* mysql-connector-python
### 資料處理
* 在 MySQL database 中,產出兩張 table:claims, policy, id_to_claims
* claims table 欄位:APLY_NO, POLICY_NO, OCR_ID, MOD_REAL_NPAY, ACPT_ID, DOC, OCR_BLACKLIST, ACPT_BLACKLIST
* policy table 欄位:POLICY_NO, INSD_ID, AGNT_ID, APC_ID, APC_BLACKLIST, INSD_BLACKLIST, APLY_NO, POLICY_NO
* id_to_claims 欄位:ID, edge, MOD_REAL_NPAY
* claims, policy 產出方法 **(將提供程式碼)**:
* claims
* 讀取 RESULT.csv, CLAIM_APLY1.TXT 及 DIAG.csv
* RESULT.csv 保留欄位 APLY_NO, POLICY_NO, OCR_ID_SAS, MOD_REAL_NPAY -> r_df
* CLAIM_APLY1.TXT 保留欄位 APLY_NO, ACPT_ID_SAS -> c_df
* DIAG.csv 保留欄位 APLY_NO, OCR_ID_SAS, DOC (由 HOSP_CODE+DOC_LISN_NO+DOC_NAME 產生) -> d_df
* r_df left join c_df on [APLY_NO, POLICY_NO] -> rc_df, rc_df left join d_df on [APLY_NO, OCR_ID_SAS]
* policy
* 讀取 APC.TXT, INSD.csv, INSURED.csv
* INSURED.csv 保留欄位 POLICY_NO, INSD_ID_SAS, AGNT_ID_SAS -> in_df
* APC.TXT 保留欄位 POLICY_NO, APC_ID, APC_BLACKLIST (由 APC_BLACKLIST or APC_BLACKLIST_NOW 產生) -> a_df
* INSD.csv 保留欄位 POLICY_NO, INSD_ID, INSD_BLACKLIST (由 INSD__BLACKLIST or INSD__BLACKLIST_NOW 產生) - i_df
* in_df left join a_df left join i_df on POLICY_NO
* id_to_claims
* 讀取 APC.TXT, INSD.csv, RESULT.csv, CLAIM_APLY1.TXT, INSURED.csv
* APC.TXT 保留欄位 POLICY_NO, APC_ID_SAS -> a_df
* INSD.csv 保留欄位 POLICY_NO, INSD_SAS_ID -> i_df
* RESULT.csv 保留欄位 APLY_NO, OCR_ID_SAS -> r_df
* CLAIM_APLY1.TXT 保留欄位 APLY_NO, ACPT_ID_SAS -> c_df
* INSURED.csv 保留欄位 POLICY_NO AGNT_ID_SAS -> in_df
* RESULT.csv 保留欄位 APLY_NO, POLICY_NO, MOD_REAL_NPAY -> rr_df
* a_df, i_df, r_df, c_df, in_df left join rr_df
* create new column edge: type sting {role}_{POLICY_NO}_{APLY_NO}, e.g. apc_123_180
* concat all above
* 親屬關係 family.csv
* 建立 python dictionary,key 為 id, value 為 list of tuple, 每個 tuple 儲存 id 及對應的親屬關係。 key: person1, value: [(person2, rel), (person3, rel), ...],(1 配偶, 2 子女, 3 父母, 4 兄弟姐妹)
* 儲存成 pickle 檔
* 地址/電話/Email
* 建立 python dictionary, key 為 id, value 為 list of string, 也就是 list 存與key同地址/電話/Email的所有 id
* 儲存成 pickle 檔
* 使用的表及欄位
```
APC
ADDRESS收費地址
ADDRESS_2 (收費地址無資料可用此欄位)
ADDR改變地址紀錄 (若有值,應一併畫在圖上)
---
MOBILE 要保人行動電話
---
EMAIL 電子郵件帳號
CLAIM_APLY1
OCR_ADDR 事故者居住地址
---
OCR_MOBILE_TEL被保險人行動電話
TRN_MOBIL_TEL 送件人手機號碼
```
### 程式設計及網頁架設
* 專案路徑:UserMount/Other/visualization_website/
* 後端
* app.py:Flask Server 由此檔案建立,指令為 python3 app.py
* searching.py:搜尋演算法,輸入為 case id, 輸出成一 json 檔
* 前端
* templates/index.html
* static/code.js
```
app/
├── app.py
├── searching/
└── templates/
├── index.html
├── loading.html
└── static/
├── code.js
├── loading.gif
└── cached/
```