1. 程式人生 > >使用者畫像之資料質量管理

使用者畫像之資料質量管理

資料質量管理這項工作的重要性不言而喻,所謂“garbage in,garbage out”,基礎資料的質量性如果無法得到良好保障,後續的推薦、資料分析工作將會變得徒勞。

 

背景

在建好使用者畫像模型後,該資料模型成為了一個個落在資料倉庫的表,資料倉庫的開發人員通過通過排程任務,每天定時從各業務資料表和日誌資料表抽取使用者行為資料加工到使用者畫像相關表中。各種型別的標籤每天加工的資料成百上千萬條,資料分析人員不會每天對這些資料的質量進行核查,去發現每類標籤的數量是否有異常情況,但是當應用的過程中使用異常資料將會導致分析結論的誤差,那麼如何高速、有效地對使用者畫像資料的質量進行管理?

 

方法

資料運營人員可以通過設定畫像各業務表資料監控範圍,當每天跑ETL出現異常變動時,通過統計每類標籤的總量變動較大時,傳送郵件讓資料運營的人員接收,然後查詢原因進行定位。

下面分享一下某個對使用者畫像資料管理的python指令碼:

 

# -*- coding: utf-8 -*- impala_01 = ''' 刪除臨時表語句''' impala_02 = ''' 建立臨時表,檢查昨日執行產生的各類使用者標籤數量是否在合理範圍內 '''   # 建表語句 impala_03 = '''查詢impala_02語句建立的臨時表中的資料量''' import smtplib import os import datetime from impala.dbapi import connect from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header from email.mime.image import MIMEImage import pyhs2 impala_conn = pyhs2.connect(host='10.21.190.220', port=10086, authMechanism="PLAIN", user='zhaoht',  password='yourpassword',  database='wedw_dw') impala_cur = impala_conn.cursor() impala_cur.execute(impala_01)   # 執行刪除臨時表的SQL impala_cur.execute(impala_02)   # 執行建立臨時表的SQL try:    impala_cur.execute(impala_03)      result_1 = impala_cur.fetchall()    data_1 = list(result_1[0])        # 將元組資料列表化    data_1 = int(data_1.pop())       # 將列表資料轉化為整數   except Exception:    data_1 = 1 impala_cur.close() impala_conn.close() sumdata = data_1   # 各標籤加總為0正常 if sumdata == 0 :       # 如果各標籤的資料量正常 則不用傳送郵件    pass else:           # 當標籤資料量出現異常時 自動傳送郵件    pwd = 'yourpassword'    sender_mail = '

[email protected]'    receiver = '[email protected]'    mail_content = '''  使用者畫像維護人員你好,gdw.persona_user_tag_relation_public表中昨日資料發生異常,各類標籤資料統計如下:A類標籤[3000000-3500000]:{} '''.format(data_1)    mail_title = '使用者個性化標籤表異常資料預警郵件'    date_str = datetime.datetime.strftime(datetime.date.today()-datetime.timedelta(days=1),'%m%d')    msgRoot = MIMEMultipart('mixed')   #例項化一個類    msgRoot['Subject'] = Header(mail_title, 'utf-8')    msgRoot['From'] = sender_mail    msgRoot['To'] = receiver    msgRoot["Accept-Language"]="zh-CN"    msgRoot["Accept-Charset"]="ISO-8859-1,utf-8"    content = MIMEText(mail_content,'plain','utf-8')    msgRoot.attach(content)    smtp = smtplib.SMTP()    smtp.set_debuglevel(1)    smtp.connect('mail.guahao.com')    smtp.login(sender_mail, pwd)   #登入發件人郵箱    smtp.sendmail(sender_mail, receiver, msgRoot.as_string())    smtp.quit()

上面的python指令碼通過執行HQL語句建立臨時表統計前一日某類使用者畫像標籤所產生的資料,通過統計每一類標籤資料量與其正常的合理範圍做比對,當發現異常情況時,傳送預警郵件到資料管理人員的郵箱,當其數值在合理範圍內時,則不傳送郵件。在完成上面的python預警指令碼後,還需要將該指令碼部署到伺服器上,通過crontab定時排程命令,每天定時檢索昨日運營產生的使用者畫像標籤數量,當發生異常情況時及時收到預警郵件(如下圖),資料管理人員可在第一時間對問題原因進行排查和定位。

 

總結

使用者畫像不“生產”資料,它只是各業務資料、日誌資料、埋點資料的“搬運工”。通常當用戶畫像相關表中出現了髒資料、異常數量級的資料時,一般是其從上游抽取資料的依賴表中出現了異常。上圖中可以看到,當用戶標籤表在2017年11月11日執行產生的資料量不在合理範圍內時,畫像管理人員的郵件在11月12日的9:53分收到了一封異常資料的預警郵件(資料倉庫隔日加工前一天的資料)。管理人員可以根據異常數量的標籤對應型別,進一步查詢其上游依賴表定位問題原因。