從小分析到大數據
前方高能預警!!!大數據科幻小說來襲!!!全文6560字,有本事就看完!!!
每周五下午的技術交流例行會又開始了,我們IT三人組聚在一起,開始頭腦風暴起來。
「如何提高流量包訂購量」,這是領導最近安排的一個課題,需要我們小組進行課題研究。
「我先給各位介紹下情況」,大洋說道。
「每月業務部門會根據各項指標,做出一些銷售動作,這就要求有一批目標客戶進行精準營銷。如套內流量消耗量超過80%的用戶,有了具體用戶的需求,然後發工單到企信數據中心,企信數據中心根據這個需求,使用已有模型或者重新取數,會在ODS平台中生成臨時表(非實時,間隔1天),我們再從ODS獲取數據後,導入到我們本地的平台,本地平台再對這些數據進行二次過濾加工後簡訊營銷。
實際上,這些用戶是否精準,模型是否合適,只能靠次月訂購量統計報表來看。目前來看,每月群發簡訊的量在幾十萬到上百萬不等,訂購量成功比例維持在個位數左右。」
「那我們具體如何做呢?」小熱問道,小熱有一定的技術功底,但是對數據分析,也是才接觸。
「要想提高訂購成功量,就要建立更好的模型演算法」,小翼握了握拳頭答道,小翼以前在數據分析部門呆過,SPSS耍的有模有樣。
「沒錯,我給大家梳理下,我這段時間的研究心得。」
「首先我們要聚合底層數據,這些數據來源有很多,如CRM數據,DPI數據、上網行為數據等等,這些數據可以在抽象成 套餐內簡訊流量,4G/3G流量,上網總時長,通話時長,套餐價格,每月消費金額等等一系列維度。」
「其次要篩選出目標用戶,可以分為低流量用戶,壓抑用戶和偏好用戶等。」
「什麼是壓抑用戶?」小熱同學對業務用語有些生疏。
「就是那些想看視頻不敢看,想下載東西也不敢下,動不動上行一個102,108到10001查詢餘額和流量的用戶。」
「哦,哦,我懂了」,小熱若有所思的點點頭。
「篩選用戶,就是從一些大的數據集中找到合適的數據,那到底什麼是大數據啊,我還是比較糊塗」,小熱繼續發問。
「簡單來說,先有數據,然後才是大數據。大數據指那些容量龐大的數據集,大到傳統的數據處理軟體無法在合理的時間內管理和處理數據。當然多大的數據才算得上大數據,目前尚無定論,但它基本是以PB為單位。舉個例子,每天全網用戶的上網數據,通話數據,這些數據是非常龐大的,可以看做是大數據。」
「有了這些數據,就會引來兩個問題,一個是存儲,一個是分析,此時依靠傳統的資料庫,文件存儲,幾乎不可用。」
「是不是用Hadoop之類的工具存儲」,小熱繼續問。
「對的,此時就要Hadoop上場了,天生就是為那些超大數據集的應用程序服務的。Hadoop最核心的有兩部分:HDFS和MapReduce。
HDFS簡稱分散式文件系統,具有高容錯性,可以部署在低廉的硬體上,HDFS為海量的數據提供了存儲。還能提供高吞吐量來訪問應用程序的數據,特別適合那些有著超大數據集的應用程序。
數據存儲後,自然要對數據做分析,否則數據不能變現就毫無價值,想想,電信有多少重要數據,有多少互聯網BAT公司眼紅的數據。此時MapReduce就該出場了,它為海量的數據提供了計算。因為有了Hadoop,在數據提取、轉換和載入方面具有極大的優勢。」
「大洋,你說的這個分析和建模分析有所區別吧」,小翼問道。
「是的,MapReduce有兩個階段組成:Map和Reduce。Map主要是讀取HDFS中的文件,把單個任務打碎,並將碎片任務發送到分散式節點上,而Reduce會對多個Map的輸出進行合併,排序,最終寫到HDFS中。」
「比如通過Google搜索中國電信這個關鍵字,搜索引擎會把這個任務變成多個MAP,並發到幾千個廉價節點上,經過查詢,Reduce會對結果合併,排序後,放入HDFS中,這樣就完成了一次查詢。」
「至於建模分析,可以認為是更高層次上的分析,數據已經整理好了,對這些數據進行不同維度的分析,此時我們就需要建模。」
「這裡還能使用SQL嗎?」,小熱最近是天天寫SQL語句,有些中毒了。
「你們倆的問題可以結合到一起來說,除了上述的兩個核心外,我們還需要一個分散式數據存儲系統HBase,HBase在Hadoop的基礎上提供了一個適合於非結構化數據存儲的資料庫,HBase利用Hadoop的HDFS作為其文件存儲系統,Hive組件為HBase提供了上層的語言支持,使得在HBase上進行數據統計變得非常簡單。
對我們來說,Hive組件就變得非常友好了,學習成本低,容易上手。它支持常見的DDL,DML和DQL語法,將SQL語句轉換為MapReduce任務執行。」
「我們來寫一些Hive SQL」,大洋在黑板上寫了一些語句。
創建分區表
create table employee (name string,age int,sexstring) partitioned by (city string) row format delimited fields terminated by" ";
分區表裝載數據
load data local inpath"/usr/local/lee/employee" into table employee partition (city="hubei");
查詢
Select* from test sort by id desc limit 5
「看到了吧,這和傳統的SQL區別不大,但是他不支持insert,update操作,使用loaddata進行數據添加。」
「其實到了這個階段,我們就可以做一些基於SQL的分析工作了。」
「但是這最多就是一個分析,不能說是建模,我們接下來討論下建模。」
「小翼,你先說說你所了解的建模。」
「恩,一般來說,我們都是預先確定一個目標,比如流量包銷售量,根據要求,先選擇一批小樣本數據,導入到Spss軟體中,這個軟體內置了很多演算法,對數據進行規則處理後,然後選擇不同的演算法,輸出一些結果數據,對這些結果數據模型進行下個月的實際生產匹配,看看反饋情況。繼續對每個月的數據進行分析,不停地調整參數,從而達到一個比較好的期望,將這些固化的過程進行模型化,以便下次繼續使用」,小翼畢竟前幾年做過Spss分析,說的很是熟練。
「在這裡,我們先了解下有監督學習和無監督學習。」
「有監督學習,就是通過已有的訓練樣本來訓練數據,從而得到一個最優模型,然後呢,我們就知道給定一組數據,正確的輸出結果應該是什麼樣子了。監督學習可以分為回歸和分類兩部分,我們簡單的認為,凡是預測一個連續值,是回歸問題,比如預定一個給定面積的房屋的價格。凡是預測一個離散值,是分類問題,比如一個腫瘤是良性還是惡性。」
「無監督學習呢?我們也不知道結果會是什麼樣子,但是我們可以通過聚類的方式提取出有用的數據。比如新聞網站會有很多關鍵字,熱點,時事,軍事,美食,經過學習後會對採集的結果自動聚類,這樣就避免了人工歸類的問題。」
「此外,有監督學習和無監督學習都包含了很多經典的演算法,監督學習中有邏輯回歸,線性回歸,K-近鄰演算法,決策樹,隨機森林,神經網路,樸素貝葉斯等。無監督學習中有k-means,PCA降維,EM演算法等。這些演算法各自有自己的使用場景。完全想自己重寫演算法不容易,需要深厚的數學功底和編程功力。我們還是做個使用者吧,用好就行了。」
「另外,工具只是其次,有些人擅長Spss,有些人精通Excel,有些人會Python,這些都能達到目的。當然作為我們這麼開發者來說,還是建議使用Python,優點多多。」
「為啥用Python嗎?Java不行嗎?」
「人生苦短,我用Python」,大洋白了小熱一眼。
「那我們如何建模呢?」小熱又開始詢問。
「我還是對這種建模一頭霧水哦,舉個例子吧」,小翼也說到。
「行,我前兩天剛好做了一個通過基站和通話時長確定商圈的例子,先給大家分享下,讓大家有個感性的認識。
手機通話,商圈,看起來貌似是兩個沒有關係的東西,但是,我們根據手機信號在地理空間上的覆蓋情況,將手機用戶在時間序列上的手機定位數據,映射到現實的地理空間位置,就可以完整的,客觀的,還原出手機用戶的現實活動軌跡,從而得到人口空間分布的特徵信息。手機終端總是與某一個基站保持聯繫,既然有聯繫,就會記錄一些關鍵信息,讓我們從這些大數據中分析出有用的信息來。
我這裡有一些樣本數據,大概幾千條,是某個區域的定位數據,欄位有年,月,日,時,分,秒,網路類型(3G/4G),基站編號,imsi(可以關聯獲取到用戶號碼),信令類型。
電信手機用戶在使用簡訊業務,通話業務的時候均產生定位數據,定位數據會記錄用戶所處基站的編號,時間和imsi。一個用戶的歷史定位數據應該能夠描繪出用戶的活動場景,而一個基站覆蓋的區域基本能等價於商圈,通過分析經過基站覆蓋範圍的人群特徵,可以識別出不同類別的基站,也就可以識別出不同類別的商圈。維度可以從基站人均停留時間和人流量兩個方面進行分析。
現在我們要做的工作有三部分
1.獲取原始數據,過濾掉不需要的用戶屬性
2.分析每個用戶在不同基站的停留時間,進行數據規約和變換的預處理
3.根據這些預處理後的數據,進行基於基站覆蓋範圍區域的人流特徵進行商圈聚類,對聚類後的商圈進行特徵分析,選擇合適的區域進行促銷活動。
數據預處理可以分為幾部分
1.把多餘的用戶屬性去掉,部分欄位合併,讓數據看起來更加符合規定約束
比如網路類型和信令類型對於數據分析用途不大,可以刪除,為了減少時間的數據維度,可以把年月日合併為日期,時分秒合併為時間。規約後的數據欄位為:日期,時間,基站編號,imsi。
2.數據變換
我們根據當前的明細數據,按照上班人均停留時間,晚上人均停留時間,周末人均停留時間,日均人流量這四個維度進行數據匯總。
3.數據歸一化處理
上面得到的數據各個屬性差異較大,我們對這些數據做一個歸一化處理。歸一化操作有可能提高數據精度。具體公式:x=(x-min)/(max-min)。從公式可以看出來,這種演算法對原始數據進行了線性變換,使得結果落到[0,1]區間。
模型構建階段
我們的數據的維度人為的處理成上班人均停留時間,晚上人均停留時間,周末人均停留時間。
部分代碼如下:
#-*-coding: utf-8 -*-
importpandas as pd
fromsklearn.cluster import AgglomerativeClustering #導入sklearn的層次聚類函數
importmatplotlib.pyplot as plt
filename= "demo.xls" #標準化後的數據文件
k= 3 #聚類數
data= pd.read_excel(filename, index_col = u"基站編號") #讀取數據
model= AgglomerativeClustering(n_clusters = k, linkage = "ward")
model.fit(data)#訓練模型
plt.rcParams["font.sans-serif"]= ["SimHei"] #用來正常顯示中文標籤
xlabels= [u"上班人均停留時間", u"晚上人均停留時間", u"周末人均停留時間", u"日均人流量"]
。。。。
省略做圖代碼
最終的結果是三幅圖,小熱你們看看,那個是商業區,那個是住宅區,那個是上班區?
商業區的特點是 上班停留時間,凌晨停留時間,周末停留時間的都比較短,但是人流量很大,圖1很符合。
住宅區的特點是 晚上和周末的人均停留時間長,上班停留時間短,人流量少,圖2很符合啊。
至於圖3,我們認為是一個工作區。
我們得到了商業區,同樣就得到了基站信息以及imsi,對應出來用戶的手機號碼,就可以定向發送營銷活動了。」
「真是不可思議,這樣的一堆看起來毫無關係的數據,經過規約和整理,再通過演算法,竟然會生成這樣的圖表,通過圖表,很清晰的看出結果。」
「對建模有感覺了,我感覺變數屬性的選擇,數據的整理是個困難,畢竟我們拿到的數據都是一張寬表,屬性欄位有幾十個到上百個。」
「這是個過程,需要對業務的熟悉理解,要不停的試錯,慢慢來,羅馬也不是一天就建成的。」
「Python真心不錯,內置這麼多演算法,numpy,pandas對數據處理太方便了,如果用其他的開發工具,工作量很大。不過以前接觸的是單個數據,一下子接觸多維向量數據,很不習慣啊。」
「有信心了吧,接下來我們就要對這些數據作分析,現在我們需要的數據都是從ODS上隔天寬表提取,基本上ODS已經通過模型固化了一些數據,你們可以對這些提取的數據再次通過建模分析進行預測學習,記住,不要把數據導入後直接寫SQL了,這樣本質上只是對數據進行了過濾而不是建模分析,小分析也能學習大數據。」
「大家不要有壓力,現階段我們也要緊跟著業務發展,以不限量流量業務為主,能做出這個訂購預測模型更好,做不出來,也很正常,畢竟現在的數據屬性維度都是電信內部的,缺少很多社會屬性和第三方關聯屬性。」
「兩位明白了吧」。
「明白了我好好鑽研下」,小熱拍拍胸脯說。
「大洋,你希望的電信行業的大數據發展應該是如何的?」,小翼扔出了一個重量級問題。
「這個嘛?」,大洋清了清嗓子。
「首先是數據來源。我們擁有大量的數據資源,有BSS、OSS、MSS、CRM數據,有DPI、信令、位置等網路和網管數據,有萬物互聯的物聯網龐大的數據體量,有電信增值業務、行業和公眾客戶應用數據,有終端、渠道、支付和客服等數據,涵蓋參與人,產品,財務,市場營銷,事件,地域,資源和賬務等數據,對這幾類數據進行加工處理,分析挖掘,對數據進行脫敏處理後,構建數據應用和產品,形成有價值的信息增值。對電信內部提供面向企業內部的客戶行為和消費特徵的分析挖掘,實現精確營銷,精準維繫,效益評價等數據應用業務需求;對合作合夥通過數據出售、數據諮詢、數據能力和數據解決方案等業務形態實現數據資產的數據運營,最終實現數據資產的增值。還有非常重要的一部分數據就是非電信內的數據,比如一些套餐arpu值在69元以上的用戶喜歡吃什麼,消費習慣等等數據。
其次就是統一建設大數據能力和應用平台。該平台能夠支持數據對外開放和集約管理,為電信內外提供大數據服務能力和大數據應用,提供統一能力開發介面、數據產品服務能力封裝、數據平台能力風封裝、資源管理、平台管控等服務,可以提供精準營銷、用戶刻畫等應用。最終就是一個從數據抽取匯聚-數據海量存儲-數據分析-數據模型輸出-對外開放-百家生態,表現為平台+應用。這一塊工作,集團已經早早在部署了。
再次從架構來說,引入Spark,Strom技術是必須的,實時集群和非實時集群的隔離,支持主流的Docker技術。另外架構也不是一成不變的,有一個逐步演進的過程,至少要做到安全性,隔離性和靈活性的統一。
最後一點就是基於大數據平台建設生態圈,大數據平台可以先對省公司,內部用戶,合作夥伴開放,逐步過渡到外部用戶,相信智慧化運營和個性化服務可以給用戶帶來更多的價值,以前我們搭建的是基礎雲計算設施的IAAS平台,這塊我們做的很好,現在我們有了大數據平台和應用的PAAS平台,讓更多的開發者,內外部用戶參與進來,把我們的平台優勢發揮極致,從而就有了SAAS,期待著演化為BAAS(區塊鏈即服務),有應用,有參與者,有合作共贏,這個生態圈才會健康成長。」
「是不是和微信公眾平台模式一樣啊?」
「恩,是的,你看現在微信公眾平台的生態圈越來越完善,這個東西只有更多的人參與分享才能壯大。」
「Spark是什麼啊?經常聽別人說起」小翼接著問。
「Spark是專為大規模數據處理而設計的快速通用的計算引擎,內存計算下,Spark 比 Hadoop 快100倍。Spark,擁有MapReduce所具有的優點,但不同於MapReduce的是中間過程輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapReduce的演算法。Spark 是一個通用引擎,可用它來完成各種各樣的運算,包括 SQL 查詢、文本處理、機器學習等,而在 Spark 出現之前,我們一般需要學習各種各樣的引擎來分別處理這些需求。」
「真是大數據開發利器啊」,小翼開始讚不絕口。
「大洋,聽你這樣一說,我更加有信心了,我想學習大數據,給我說說大數據的發展規劃吧」,小熱說。
「從大數據職業發展方向來看,我們可以做一個大數據工程師,熟悉Hadoop,Spark,HBase,Hive,Strom,Kafka等各種大數據平台和框架。也可以做一個大數據分析師,基於大數據平台工具進行數據分析處理,用數據抽象業務問題,能夠熟練的使用適當的統計分析方法對收集來的大量數據進行分析,將他們加以匯總,理解並消化,以求最大化地開發揮出數據的作用。還可以做數據挖掘工程師,精通R或者python語言,需要較強的編程能力,通過語言進行模型演算法優化和相關數據產品的開發。對我們技術人員來說,大數據工程師的知識要懂,在做好數據分析的基礎上,進行數據挖掘,找出有用的數據就行。」
「學不完的知識啊,簡直是個無底洞」,小翼也有些嘆氣。
「大洋,現在這些框架平台都是基於Linux平台,我記得你以前對Linux操作系統不感冒,你的轉變有點大啊」,小翼對大洋還是比較了解的。
「呵呵,這個嘛,此一時,彼一時,你沒看微軟的很多軟體都支持Linux了嗎?.Net Core ,SQL Server,我們也要與時俱進啊,不擼起袖子干,我們會被技術淘汰的。」
「小翼,小熱,最近你們兩可能大數據項目參與時間會減少,我們研發團隊開發的互聯網化的電信全業務銷售,人人分銷工具『電小二』目前正在全疆推廣開來,訂單量暴漲,你們先去支撐一下。畢竟我們是開發運營一體化,哪裡需要我們,我們去哪裡。」
「有問題找我,畢竟電小二是我親自架構設計的,這段時間我要做個大數據工程師,把大數據底層需要的框架平台在內部先搭建起來,這樣後期我們針對電小二的小數據可以分析下,分析用戶習慣,預測訂單量,提高訂單轉化率。」
「看來,只要有心,大數據無處不在啊。」
」大洋,你這裡還有啥乾貨不?讓我們在看看」,小翼說道。
「沒啥乾貨,乾貨都分享給你們了」,大洋詭異的笑著。
「來,一起拍張照吧,看看我的機器學習。」
「機器學習?人工智慧?」小翼和小熱異口同聲的說。
「知道那個阿法狗吧,它通過數量龐大棋譜以及自我對局獲得提高,輕鬆擊敗世界第一人。現在那個阿法狗已經推出2.0版本了,將正式摒棄人類棋譜,只靠計算機自身深度學習的方式成長,就能到」圍棋之神」的境界。」
「機器學習和深度學習有啥區別啊?」小熱又開始問了。
「這個話題嘛,你先自己學習,我們下次再說。」
「看來技術路線還很長啊」,小翼和小熱都有些癟癟嘴,不約而同的說道。
「別苦笑個臉,來,笑一個」
本文作者:楊永剛,中國電信新疆公司,電子渠道運營中心。
(以上內容僅代表作者觀點)
TAG:創新5678弄 |