前言
本篇文章同樣是繼續微軟系列挖掘算法總結,前幾篇主要是基于狀態離散值或連續值進行推測和預測,所用的算法主要是三種:Microsoft決策樹分析算法、Microsoft聚類分析算法、Microsoft Naive Bayes 算法,當然后續還補充了一篇結果預測篇,所涉及的應用場景在前幾篇文章中也有介紹,有興趣的同學可以點擊查看,本篇我們將總結的算法為Microsoft時序算法,此算法也是數據挖掘算法中比較重要的一款,因為所有的推算和預測都將利用于未來,而這所有的一切都將有一條時間線貫穿始終,而這將是時序算法的側重點。
應用場景介紹
通過前幾篇文章的介紹,我們已經能預測出影響某種行為的因素有哪些,并且根據這些因素綜合挖掘出我們的最優客戶群體(將會購買自行車),這也是上面介紹的幾種算法的長項,但是會不會覺得從大數據中獲取的信息太少了點,與很多問題僅僅通過上面幾種算法是推算不出來的,但這些信息恰巧是上層領導關注的,比如說:
1、作為數據分析人員,你能不能根據以往的銷售情況預測出明年的銷售業績?這樣的問題怎么解決?有哥們會這么解決了,哈...我取去年一年的銷售值做平均值,那如果不足一年呢?那要是預測明年一月份的呢?....
2、能不能根據以往的銷售情況預測出銷售的旺季,像房地產行業的“金九銀十”說的就是這個,這些都是資深銷售人員的經驗總結,但是你能保證公司里面有這種人?即便有你能保證他說的正確?即便正確能保證他說的適合別的產品?即便適合能保證適合不同的地區?....我那個去...這些的這些稍后我們讓數據來告訴你!
3、不同地區的銷售規律是否一致?也就是說是否為同一種銷售策略....哪一種銷售策略更適合那一類產品的方式..各種產品之間的銷售量是否會有影響、存不存在連帶銷售?是不適合我們做捆綁銷售。
以上的這些問題我們通過Microsoft時序算法都可以解決,而這些問題也就是該算法的應用場景,閑言少敘,我們進入本篇的正題。
技術準備
(1)同樣我們利用微軟提供的案例數據倉庫(AdventureWorksDW2008R2),這這里我們只需要用到一張表,確切的說是一張視圖vTimeSeries,其實這里面就是記錄的往年不同月份的銷售匯總值,稍后我們將詳細分析這部分數據。
(2)VS2008、SQL Server、 Analysis Services沒啥可介紹的,安裝數據庫的時候全選就可以了,這里前段時間有人問我為什么他的vs工具沒有新建數據挖掘工程的模板,這里提一下,其實vs作為微軟的主打開發軟件,所以它的更新速度是遠遠快于數據庫更新版本,所以要選擇開發數據挖掘解決方案的時候需要在開始菜單中找到SQL Server目錄下的vs連接即可。
操作步驟
(1)新建解決方案,然后數據源,然后數據源視圖,很簡單的步驟,不明白的可以看我們前面幾篇文章,我們直接看圖
我們給解決方案取了個名字,然后從數據源中找到了我們需要挖掘的表,將我們需要的表創建好,取了個名字為:SalesByArea,可以看到這張表就是記錄往年各個月份的銷售記錄和銷售業績,下面我們對這個表里面的數據進行粗略分析。
(2)預覽數據,分析源數據結構內容
這里我們需要對要分析的數據進行分析,先看看里面有那些內容,是不是滿足時序算法的數據要求條件。同樣我們右鍵“瀏覽數據”,我們選擇隨機抽樣,抽樣數據為5000行。具體方法這里不贅述,具體方法可參考前篇文章,我們直接看圖
這里面有幾列數據,其實內容挺簡單的,我們來看,有自行車品牌和地區、時間線、銷售數量、銷售額度、年、月、報告日期。從報告日期來看基本上是每個月的25號形成報告,然后每個月生成一份,在利用Microsoft時序算法中對數據是有要求的:
1、要求分析數據序列必須含有時間序列,并且序列值為連續...這個可以理解...如果沒有連續值就談不上推測,因為數據本身他就沒有規律可循....
2、要求分析數據序列存在唯一標示值,其實也就說傳統意義上面的主鍵,這個在每個算法中都要用
從上面的數據中我們可以將報告日期和第一列自行車品牌和地區(ModelRegion)形成組合主鍵滿足上面的第二點要求,因為同一個時間一個品牌在一個地區只能產生一個銷售值。
我們來詳細分析上面的時間看看能不能滿足第一個條件,我們選擇透視表,這個和Excel里面的透視表是一樣的,用起來基本沒啥問題,我們將明細數據拖入到區域中間,將列選擇報告日期、行選擇自行車品牌區域(ModelRegion),我們來看看數據:
我們可以看到,這張往年銷售記錄表中包含了從2005年到2008年的銷售記錄,其中06年和07年都是全年每一個月份都會含有一個記錄,而2005年、08年只有半年的數據,其實這里08年只有半年數據是正常的,因為微軟案例數據庫AdventureWorksDW2008R2產生的日期就是在這里,也就是說我們會預測這之后的銷售記錄,05年只有半年表示數據時從這里開始的,這個沒啥問題...我們繼續向下拖動
我去...這下面的幾種產品在05年、06年就沒有任何銷售記錄,這有兩種可能,第一種是這兩個產品從06年才開始引進銷售的,所以之前的數據沒有是正常的,當然還有一種極端的情況那就是這兩年這個產品銷售量就為0...對于這種情況我們要跟業務方確認做處理,對于我們分析人員而言...銷售記錄不存在空值,也就是說這地方沒有銷售顯示值應為0,而非空!
我們點擊年份進入月份,詳細的看一下值。
看來這些數據開始日期真是從05年7月份開始,然后到08年6月結束,而且這之間每個月份的數據都是連續的,也就是說從開始到結束連續的每個月都有值,我們向下面拖
的確,下面的這幾種商品是從07年7月份開始產生銷售,結束日期都是到08年6月份結束。
經過上面的分析,其實這種表中的數據是滿足我們Microsoft時序算法的數據要求的,其中存在連續的時間軸維度,只是有幾種產品銷售開始日期不是全部從開始日期開始的,對于這種情況時序算法是允許的,只要保證在我們時間軸維度中每一個序列都有統一的結束日期,并且區間時間為連續的既可以。
當然可以通過其它方式分析源數據,咱這里就不進行了。
(3)新建挖掘結構
在挖掘結構上右鍵,現在新建數據挖掘結構,然后下一步...繼續然后下一步...這里不做贅述,不明白可以參考前幾篇文章,我們選擇Microsfoft時序算法,看圖
點擊下一步,有幾個關鍵點我們需要設置一下,我們來看圖:
這里我們將品牌和區域、報告日期聯合形成鍵列,將銷售量和銷售業績兩列即作為輸入又作為輸出,因為這兩列即使我們歷史分析要用的輸入值,也是我們以后將要推測的輸出列,當然也可以通過建議進行分析,這里我們很明白要做的事情,我們點擊下一步,
我們留下30%的事實,做后面的準確性驗證測試,然后取個名字:Forecasting,然后選擇下一步
(4)參數配置
對于Microsoft時序算法有幾個參數比較重要,需要單獨配置,這里我們介紹一下
PERIODICITY_HINT:該參數提供了有關數據模式重復頻率的算法信息。簡單點講就是時間序列的重復迭代時間間隔,比如本篇文章中用到的時間軸就是為每個月更改一次,且周期為年為單位,所以我們將這個參數設置成12,意思是每十二個月重復一次。
然后我們就需要部署、處理該挖掘模型了。然后下一步我們進行結果分析。
結果分析
部署完程序之后,我們通過“挖掘模型查看器”進行查看分析,不廢話,我們直接看圖:
上面的圖就是Microsoft時序算法出來的結果圖了,挖掘模型查看器為這種算法提供了兩個面板查看,一個是圖表、另一個是模型,下面我們將以此詳細分析,平常最常用的就是圖表模型查看器,圖標區分為兩塊,如上圖,前半部分模型歷史分析數據,后面模糊區為推測區域,右側一個序列篩選的下拉選項框,從橫軸中我們可以看到,時間區間為2005年7月25——2007年11月25折線以實線表示,后面的區域為預測區域,預測區間為2008年7月25日至2008年11月25,折線以虛線表示。
嘿嘿...看起來是不是很清爽。
我們來選擇一個產品來看看,我們選擇M200 Europe、M200 NorthAmerica的銷量情況,下面看圖:
通過點擊圖表中間的點擊線,我們可以分析這款自行車在這個兩個地區一年中的銷售峰值為5月和12月,也就是所謂的旺季...這沒啥特別的對吧,5月大春天...嗯?米國五月應該也是春天...春天適合戶外...自行車買的好也理所當然,這里其實我們更關心明年的旺季或者淡季是啥時候,因為根據此我們更能夠采取相應的應對措施,比如旺季多增加庫存,淡季減少庫存等吧,我們來看M200這款產品在08年的旺季是那個月....
看到了吧,08年的7月份將是這款產品的旺季,同樣淡季為九月份
而這是在歐洲的銷量,但是在北美就不一樣了,它反而是在08年的9月份為旺季,是吧,上圖中可以看到,說明這兩個區域的銷售量還會有蠻大區別的,僅僅憑靠經驗是分析不出來的對吧。同樣它的淡季反而提前到來了,看下圖:
同樣從上面的所有的這兩款產品的產品圖中可以看到,這兩款產品的銷量是蒸蒸日上,也就是所謂的朝陽好賣的產品,所帶來的利潤肯定也在未來將會更好,我們可以點擊推測出他們在08年的營業額度是多少。我們來看圖:
從上面圖可以看出,根據折線圖規律可以看出銷售額度和銷售量是相關的,汗...廢話!當銷售量增加的時候,銷售額度也跟著增加,但是從上圖中可以看到一個有趣的信息,那就是在2006年6月25號以前銷售額度和銷售量是一條線,但是之后就分開了...對吧?這說明什么?...之后的銷售數量開始慢慢的比銷售額度增高了...啥意思?也就是說這款產品賣得多了,他的銷售額度反而少了...汗...啥原因?原因很簡單....產品降價了!..產品降價了所以它的銷量上去了,同比這里我說的是同比他的銷售額度反而降下來。
不管怎么著這款產品隨著時間的增長慢慢的開始大賣了..而且營業額也在增加,尤其在2007年底的時候有了一個大面積的跳躍,我估計是采取了比較好的措施。從圖中我們還可以看到將在2008年8月份有一個很大的銷售額度...推測出來的銷售額為2267%。當你拿著這份預測成績單給BOSS...BOSS會不會睡夢中都能把自己笑醒...
是不是所有的產品都這么叫賣呢,我們來展開其它的幾款看看:
嘿嘿...我們找到了一款比較不叫座的產品...T1000,從圖中可以看到,這款產品是2007年8月份才上市的,并且已經上市銷量開始提升,但是以后開始慢慢萎縮...我去...經預測到08年的時候這款產品銷售額平平,還有大跌的趨勢!如果你作為領導層看到這種業績該咋辦?想法子?還是直接退市?
如果此曲線顯示不夠直觀,我們可以通過更改預測步驟數,更改折線的平滑程度,來對未來的預測顯示的更直觀一點。當然調整這個參數也可以更改預測區間
是吧...這個T1000產品到2011年的時候估計就埋沒了...看樣子還有可能成負數...也就是會出現賠本賺吆喝的境地,當然預測的時間區間越遠,該算法的準確度將更低,畢竟嘛誰也不能預測太久未來的事情,因為很多因素都在變化著。
下面我們來看看VS為我們提供的另一個面板“模型”,該面板提供了每一個序列類型根據數據內容形成決策樹算法,推測每個序列隨著時間軸的進展所影響該序列的因素值,詳細信息可以參照我前面的文章:Microsoft決策樹算法。
上圖中可以看到R250這款產品將以2007年8月22日這天為分界線,在這之前銷量值遠遠大于這之后的銷量,神馬原因?怎么回事?這些的就需要去咨詢業務部分了,我們從數據中可以看到這個狀況,這些情況的發生都一般都會有巨大的原因因素來促成,舉個例子:比如今年9月30,國內發布了新的房貸政策...如果該曲線是房價預測線,這個因素就能體現在那天、再比如上一周北京持續霧霾...如果該曲線是口罩的銷售量預測線,這個因素就是促成這個節點的原因.....
這個面板展示結果我們就不詳細分析了,它的展示方式就是決策樹的分析方法,有興趣的同學可以參照我以前的文章。
上面的過程中我們只分析了整個挖掘的過程,根據折線圖分析了部分產品的趨勢和銷售問題,其實還缺少了最重要的一個步驟,那就是告訴我明年一年月份銷售的業績和銷售額度是多少,在我們以數據說話的時代,剛給我們產生一個趨勢圖用處有限,畢竟市面上隨便找一款圖表軟件我都能搞的出來,甚至搞的比你這個更好看!
我們后面的文章將解決這個問題,通過預測我能明確地預測出明年甚至后年每個月份的銷售業績和銷售額度是多少!拿著這份報告你就可以理直氣壯的去找BOSS,剩下的事就是他去做了....
結語
結語...該寫什么呢?我們來總結下,數據挖掘的含義,其實整個流程都是在利用數據加上數學來推測和預知未知的事情,而當前的我們所利用的數學已經可以來產生預測,同樣隨著IT行業互聯網近乎十年的蓬勃發展所積累的數據也可以滿足數據要求,并且隨著數據存儲成本的降低,結構化和非結構化數據的轉變成本降低,我們所身處的就是一個數據的海洋,而當前迫切需要轉變的是我們,或者說是一個觀念的轉變,一個思維進步的過程,這就是大數據時代的意義所在!
文章的最后我們給出前幾篇算法的文章連接:
如果您看了本篇博客,覺得對您有所收獲,請不要吝嗇您的“推薦”。
文章列表