1. 程式人生 > >基於微軟案例資料探勘之Microsoft 時序演算法

基於微軟案例資料探勘之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行業網際網路近乎十年的蓬勃發展所積累的資料也可以滿足資料要求,並且隨著資料儲存成本的降低,結構化和非結構化資料的轉變成本降低,我們所身處的就是一個數據的海洋,而當前迫切需要轉變的是我們,或者說是一個觀念的轉變,一個思維進步的過程,這就是大資料時代的意義所在!