風險大腦-支付風險識別天池大賽(二)資料儲存及檢查
阿新 • • 發佈:2019-01-07
本次想把過程寫的詳細些,所以本節和上一節講了如何充分利用大資料平臺處理資料,如何利用最有效的工具進行資料儲存、處理、分析。另外這次準備用Inceptor(分散式SQL引擎,可以理解為Hive數倉)、Sophon、R語言來完成。
在下一節,我會將建模過程思路和大家分享。
本節詳細步驟如下。
一、上傳資料檔案至HDFS目錄。
訓練資料和AB榜測試資料。
hadoop fs -mkdir /tmp/jbw/ant/atec_anti_fraud_train hadoop fs -mkdir /tmp/jbw/ant/atec_anti_fraud_test_a hadoop fs -mkdir /tmp/jbw/ant/atec_anti_fraud_test_b hadoop fs -put /mnt/disk1/ant/atec_anti_fraud_train_convert.csv /tmp/jbw/ant/atec_anti_fraud_train hadoop fs -put /mnt/disk1/ant/atec_anti_fraud_test_a_convert.csv /tmp/jbw/ant/atec_anti_fraud_test_a hadoop fs -put /mnt/disk1/ant/atec_anti_fraud_test_b_convert.csv /tmp/jbw/ant/atec_anti_fraud_test_b
二、建立外表、匯入資料
DROP TABLE IF EXISTS bowen_payment_risk.atec_anti_fraud_train_ex; CREATE EXTERNAL TABLE bowen_payment_risk.atec_anti_fraud_train_ex( id STRING, label STRING, pay_date STRING, f1 DOUBLE, f2 DOUBLE, f3 DOUBLE, ... f297 DOUBLE ) ROW FORMAT DELIMITED fields terminated by ',' LOCATION '/tmp/jbw/ant/atec_anti_fraud_train';
三、檢測資料
資料質量:
-- 檢查資料質量,即label的取值(經過驗證,發現label取值只會為0,1,-1,分別是無風險,有風險,無標籤)
SELECT
COUNT(*)
FROM
atec_anti_fraud_train_mini_ex
WHERE
label != 0 AND label != 1 AND label != -1;
篩選出有標籤的資料,並去掉表頭:
-- 有標籤的資料 DROP TABLE IF EXISTS atec_anti_fraud_train_label; CREATE TABLE atec_anti_fraud_train_label AS SELECT * FROM atec_anti_fraud_train_mini_ex WHERE id != "id" AND label != -1;
檢視帶標籤資料中有風險與無風險的資料情況:
-- 共990006條有標籤的資料,有風險的共12122條資料,無風險的有97884條資料。
SELECT
count(*)
FROM
atec_anti_fraud_train_label
WHERE
label = 1;
比例還行,所以在資料預處理中不用對原始資料進行取樣了,直接幹。重複ID檢測:
-- 判斷訓練資料集是否有重複id
-- 若有則需要將id送入模型訓練,若無則不需要
DROP TABLE IF EXISTS distincted_count_atec_anti_fraud_train_label;
CREATE TABLE distincted_count_atec_anti_fraud_train_label AS
SELECT
DISTINCT id
FROM
-- atec_anti_fraud_test_a
-- atec_anti_fraud_test_b
atec_anti_fraud_train_label;
-- b榜測試資料表
DROP TABLE IF EXISTS atec_anti_fraud_test_b;
CREATE TABLE atec_anti_fraud_test_b AS
SELECT
*
FROM
atec_anti_fraud_test_b_ex
WHERE
id != "id";
-- 判斷b榜測試集中是否有重複id
DROP TABLE IF EXISTS distincted_count_atec_anti_fraud_test_b;
CREATE TABLE distincted_count_atec_anti_fraud_test_b AS
SELECT
DISTINCT id
FROM
-- atec_anti_fraud_test_a
atec_anti_fraud_test_b;
-- atec_anti_fraud_train_label;
-- 結果為990006,說明無重複的id,放心搞
SELECT count(*) FROM distincted_count_atec_anti_fraud_train_label;
-- 結果為500539,說明b榜測試資料無重複的id,也可放心搞
SELECT * FROM atec_anti_fraud_test_b WHERE id != "id" LIMIT 10;