1. 程式人生 > 其它 >Microsoft 線性迴歸分析演算法

Microsoft 線性迴歸分析演算法

前言

在此係列中涵蓋了微軟在商業智慧(BI)模組系統所能提供的所有挖掘演算法,當然此框架完全可以自己擴充,可以自定義挖掘演算法,不過目前此係列中還不涉及,只涉及微軟提供的演算法,當然這些演算法已經基本涵蓋大部分的商業資料探勘的應用場景,也就是說熟練了這些演算法大部分的應用場景都能遊刃有餘的解決,每篇演算法總結包含:演算法原理、演算法特點、應用場景以及具體的操作詳細步驟。

本篇介紹的為Microsoft線性迴歸分析演算法,此演算法其實原理和Microsoft神經網路分析演算法一樣,只是側重點不一樣,Microsoft神經網路演算法是基於某種目的,利用現有資料進行“誘探”分析,側重點是分析,而Microsoft線性迴歸分析演算法側重的是“預測”,也就是基於神經網路分析出來的規則,進行結果的預測。

應用場景介紹

該演算法的應用場景和上一篇的Microsoft神經網路分析演算法一樣,不清楚的可以點選檢視,可以簡單列舉:

  • 營銷和促銷分析,如評估直接郵件促銷或一個電臺廣告活動的成功情況。
  • 根據歷史資料預測股票升降、匯率浮動或其他頻繁變動的金融資訊。
  • 分析製造和工業流程。
  • 文字挖掘。
  • 分析多個輸入和相對較少的輸出之間的複雜關係的任何預測模型。

其實該演算法為Microsoft神經網路分析演算法的補充演算法,上一篇我們已經介紹了,當我們面對一堆的資料而要基於某種目的去資料探勘時,感覺到無從下手或者在DM中選擇不到合適的演算法的時候,這時候我們會應用到Microsoft神經網路分析演算法,當我們用Microsoft神經網路分析演算法分析出規則的時候,我們就的利用Microsoft線性迴歸分析演算法進行結果預測了。

技術準備

(1)微軟案例資料倉庫(AdventureWorksDW208R2),案例資料倉庫中的呼叫中心的資料表,和上一篇的Microsoft神經網路分析演算法用到的是同一張事實表FactCallCenter,詳細可參閱上篇。

(2)VS2008、SQL Server、 Analysis Services。

挖掘目的

上一篇我們已經利用Microsoft神經網路分析演算法對微軟案例資料庫中的呼叫中心資料進行了簡要的分析,通過分析其實我們知道了影響“結束通話率”這個指標的因素最主要的是兩個:第一個是應答平均時間(AverageTimePerIssue),第二個就是上班階段(Shift),並且推斷深夜上班結束通話率低等規則吧,本篇我們將利用這些規則來做挖掘。

兩個目標:

1、根據規則發掘出平均應答時間調整到多少最好,或者基於目標,比如要求結束通話率控制在0.05以內,應答時間應該控制在多少合適。

2、如何安排崗位時間及崗位人數最佳,比如:安排幾班崗位,每個崗位安排多少人,然後什麼時間上班最好。

操作步驟

(1)我們這裡還是利用上一期的解決方案,直接開啟,看圖:

我們來新新增Microsoft路邏輯迴歸演算法,在挖掘模型面板中,右鍵新增新的演算法,不明白的可以參考我前幾篇文章

我們來設定輸入和預測屬性值,預設的和前面的Microsoft神經網路屬性值一樣,因為我們要預測“結束通話率”和崗位人數,我們這裡選擇ServiceGrade和Level Two Operators設定為“預測”,這裡VS會為這兩個元資料容器建立兩個單獨的模型。也就是說這個演算法回味每一組可預測屬性建立一個單獨的子樹。

其它列我們都更改為“輸入”。

我們來部署該挖掘模型,然後執行,下一步我們就是要瀏覽資料。

(2)部署程式,建立挖掘

在部署完程式後,然後點選執行按鈕,這裡我們可以看到“挖掘模型檢視器”,該演算法的瀏覽器展示的內容和Microsoft神經網路演算法是一樣的,這裡就不廢話介紹了,不懂的可以參考我上篇文章。

所以說該演算法和Microsoft神經網路演算法是一樣的,這裡面如果真的去對比的話,其實Microsoft邏輯迴歸演算法是基於目的進行設計的,就是說它比起神經網路演算法的話,它是帶著目標去進行邏輯傳遞的,這一點有點像Microsoft決策樹演算法和貝葉斯演算法的關係一樣。

不廢話,我們接著進行我們的挖掘

我們直接進入“挖掘模型規則”

我們這裡選擇好“挖掘模型”,然後在挖掘模型中選擇“單獨查詢”

這裡我們選擇上一篇神經網路發現的規則,換班時間(Shift)選擇:夜晚(midnight),嘿嘿...然後第二班的人數我們輸入個人數,我們假定有6個人

我們在“源”裡選擇“預測函式”,“欄位”選擇PredictHistogram,然後將 ServiceGrade拖入“條件/引數”

點選執行,就可以看到這種規則下的,預測的“結束通話率”是多少了,6個人上夜班

嘿嘿...結果出來了..0.102566737...結果還可以嘛...表示100人打進電話才有10個人結束通話。後面的值是一些資料支撐,比如事例數,可能性等

這種預測是比較單一,我們不能一個個的人數去試驗,其實基於這種模型我們還可以進行更深度的挖掘,比如當前我們的呼叫中心人數、上班的次序已經是固定的,我們可以根據這個現有資料進行預測,預測出下一步將如何調整:

我們這樣幹:

首先我們根據現有表中的資料建立一個可用於預測的資料行,我們按照上班輪次,是否節假日進行分組,取出每個輪次的平均人數、平均電話數等...我們可以利用這個語句:

我們這裡把最大值和最小值頁進行篩選,以便於後續的挖掘。我們將這個語句改成VS中的資料來源檢視中的:命名查詢

我們進去到挖掘面板中,選擇該事例表

然後編輯好管理關係,將包含 Calls 列、Orders 列、Issues 列和 LvlTwoOperators 列對映到平均值。

我們設計一下預測函式

點選執行,我們可以看到預測的明細結果:

上面的分析結果可以看到,在holiday(節假日)的midnight(晚間)的結束通話率是最高的:0.158,而在PM2(下午第二檔)的weekday(工作日)日的結束通話率是最低的:0.1144

但是這些值或許還不是我們所期望的,比如老總髮話了,要將結束通話率保持在0.1以下,該如何調整呢,其實基於上一篇我們神經網路演算法已經分析出來,平均應答率這個因素對於結束通話率這個指標影響是非常大的,我們可以通過調整這個值來減小結束通話率這個值的大小,提高服務水平,比如我們可以減少%90或者80%的平均應答時間,我們來預測以下這樣產生的結束通話率的值為多少。

我們調整上面的資料來源檢視的語句,增加兩項:

然後將這個語句調整值資料來源檢視中,利用上述方法來預測下減少到90%的平均應答時間,它的結束通話率是多少,我們直接寫DMX語句進行查詢:

SELECT
  t.[Shift],
  t.[WageType],
  Predict([FactCallCenterReturn].[Service Grade]),
  PredictProbability([FactCallCenterReturn].[Service Grade])
From
  [FactCallCenterReturn]
PREDICTION JOIN
  OPENQUERY([Adventure Works DW2008R2],    'SELECT      [Shift],
      [WageType],
      [AvgCalls],
      [AvgIssues],
      [AvgOperators],
      [AvgOrders],
      [Last90TimePerIssue]
    FROM
      (SELECT DISTINCT WageType, Shift, 
AVG(Orders) as AvgOrders, MIN(Orders) as MinOrders, MAX(Orders) as MaxOrders,
AVG(Calls) as AvgCalls, MIN(Calls) as MinCalls, MAX(Calls) as MaxCalls,
AVG(LevelTwoOperators) as AvgOperators, MIN(LevelTwoOperators) as MinOperators, MAX(LevelTwoOperators) as MaxOperators,
AVG(IssuesRaised) as AvgIssues, MIN(IssuesRaised) as MinIssues, MAX(IssuesRaised) as MaxIssues,
AVG(AverageTimePerIssue) as AvgTimePerIssue,(AVG(AverageTimePerIssue)*0.9) as Last90TimePerIssue,
(AVG(AverageTimePerIssue)*0.8) as Last80TimePerIssue
FROM dbo.FactCallCenter
GROUP BY Shift, WageType) as [Shifts for Call Center]    ') AS tON
  [FactCallCenterReturn].[Wage Type] = t.[WageType] AND
  [FactCallCenterReturn].[Shift] = t.[Shift] AND
  [FactCallCenterReturn].[Calls] = t.[AvgCalls] AND
  [FactCallCenterReturn].[Issues Raised] = t.[AvgIssues] AND
  [FactCallCenterReturn].[Level One Operators] = t.[AvgOperators] AND
  [FactCallCenterReturn].[Orders] = t.[AvgOrders] AND
  [FactCallCenterReturn].[Average Time Per Issue] = t.[Last90TimePerIssue]

來看一下結果:

結束通話率相比平均值有所減小,但是還沒有滿足BOSS的要求,在0.1以下,我們繼續減小平均應答率看看,減少到80%

我們再來看一下預測結果:

嘿嘿,已經出現0.1以下的應答率了,看樣子按照這個規則進行調整,基本是能滿足BOSS的要求了,將平均應答率減少至80%。

有興趣的童鞋,可以按照此規律進行分析挖掘,來正確的調整每個崗位的人數以及上班輪次的調整等。

結語

本篇文章到此結束了...本篇和上一篇的Microsoft神經網路分析演算法是相關聯的,不清楚的可以參照,其實關於Microsoft神經網路演算法和Microsft邏輯迴歸的應用場景非常的廣泛,熟悉好這兩種演算法很關鍵。

其實關於資料探勘這塊在微軟這邊能做到的基本都涵蓋到了,雖然當前SQL Server版本已經到了2012..2014版本貌似也問世了,但是這一系列的版本中,關於商業智慧BI這塊它其實是沒有實質性的提高的,其關鍵技術還是於SQL Server2005上出現的,所有本系列演算法總結基於SQL Server2008版本,所應用到的範圍是基本能涵蓋全的。