經由 Microsoft SQL Server 2005 Analysis Services 建立庫存預測模型:Microsoft TechNet

由 作者:Apollo Data Technologies

SQL Server 技術文章
發佈日:2005 年 9 月
適用於:SQL Server 2005

摘要:本文將說明如何利用 SQL Server 2005 Analysis Services 建立零售缺貨預測模型。這些模型在套用於 Project REAL 資料時,所產生的預測結果都相當精確。使用 Project REAL 來處理資料的零售商,只要在公司部署這些預測模型,即可提高數百萬美元的年銷售量。

本頁內容

背景
關於 Project REAL
資料倉儲說明
資料採礦方法和模型化資料集建構
預測模型化結果
將庫存預測自動化
結論
〈附錄 A:商店叢集屬性〉
〈附錄 B:缺貨 DMX 查詢〉

背景

為客戶提供大量產品的國內和國際零售商,皆面臨必須確保數百或數千家商店擁有充份產品庫存量的挑戰。判斷充份庫存量的問題,平衡了下列兩種競爭成本的消長。

  1. 保存高庫存量所付出的成本。這些成本是指由零售商支付的款項,目的在維護實際所用的空間、預留貨量以備其他供應商購買,以及配送產品,讓所有的零售商店皆保有高庫存量。

  2. 錯失買賣良機所付出的成本。這些成本是指客戶上門購買產品時,因產品缺貨而無法達成交易所產生。

面臨這種困境的零售商,通常有兩條路可以選擇。一是超量進貨,而承擔高庫存成本,否則就是維持低廉的庫存成本,但承擔因缺貨而錯過買賣良機的損失。而打贏這場成本拉鋸戰最好的方法,就是建立預測模型,確保每一家連鎖商店都擁有正確的庫存量。

零售商通常都仰賴可靠的供應鏈軟體、內部分析人員以及敏銳的洞察力,來預測庫存需求。但是隨著利潤壓力增加,許多零售商從財務長到庫存管理員,無不積極尋求更精確的方法來預測連鎖商店的庫存。而解決方案就是預測分析論。它可以精確預測哪些產品該分配到哪幾家商店。

本文將說明 Analysis Services 在 Microsoft® SQL Server™ 2005 中的用法,以及 SQL Server 資料倉儲功能,以資料採礦技術提供精確的最新資訊,幫助您做出產品庫存的決策。此處所提供的方法,是專門用來提供商店/產品的缺貨預測。SQL Server 2005 Analysis Services 可以針對某一項產品建立資料採礦模型,為每家連鎖店進行缺貨預測。這個方法可讓零售商有效平衡與產品庫存有關的競爭成本。

關於 Project REAL

Project REAL 針對以 SQL Server 2005 為基礎的商務智慧 (BI) 應用程式,探索建立這些應用程式的最佳作法。而方法是在 Project REAL 建立以真實客戶實例為根據的參考實作。這表示我們納入客戶資料,用以模擬客戶在部署期間所要面對的相同問題。這些問題包括:

  • 結構描述 (包括關聯式結構描述與 Analysis Services 所用的結構描述) 的設計。

  • 資料擷取、轉換與載入 (ETL) 程序的實作。

  • 專為報告與互動分析設計與部署客戶前端系統。

  • 配合生產而調整系統大小。

  • 持續不斷的管理與維護系統,其中包括資料的遞增更新。

我們藉由真實的部署案例,徹底瞭解利用 SQL Server BI 工具來實作 BI 系統的方式。而目標在於因應希望分析大型資料集的公司,在實際部署過程中會面臨的所有顧慮。

本文將摘要說明截至目前為止,Project REAL 執行過的資料採礦工作。另外還有一些文件也說明過去執行的成果以及在其他領域學習到的經驗。如需最新資訊,請造訪 Project REAL 網站 (http://www.microsoft.com/sql/bi/ProjectREAL/)。

資料倉儲說明

在 Project REAL 中,資料倉儲的目的是針對在全國擁有數百家商店的零售商,彙總數百萬種產品的銷售資料。下面是建立缺貨預測模型所用的相關資料集:

  • 根據商店、產品 (項目)、日期層級所彙集的銷售事實資料。具體說來,零售商連鎖的每家商店以及每項銷售產品,都列有每日銷售資料。

  • 根據商店、產品 (項目)、日期層級所彙集的庫存事實資料。具體說來,零售商連鎖的每一家商店、每一天、每一項產品,都列有產品庫存日數。

  • 含有產品名稱、說明、零售價格和產品類別階層的產品 (項目) 資訊。

  • 商店描述、商店分類 (例如,指定商店大小的指標)、分店、商店區域、商店行政區、城市、郵遞區號、州、櫃長的直線英呎數以及其他商店資訊。

  • 日期資訊 (日期維度),日期資訊是把根據事實的日期識別碼,對應到適當的會計週度、月度、季度、年度和其他日期資訊。

擁有清楚、最新的資料倉儲,可以讓所有的商務智慧應用程式確實利用這項有價值的資訊資產。在這項建立缺貨模型的工作中,資料倉儲可以方便您建構模型化資料集。

資料採礦方法和模型化資料集建構

我們根據在 Project REAL 期間,將資料採礦技術套用到各種零售預測和缺貨模型問題所得的經驗,發展出一個兩階段的模型建立程序,可以提高預測的精確度。

模型建立程序的第 1 階段,是根據總體銷售型態的零售連鎖商店所組成。待品質商店叢集模型建構之後,就可以在第 2 階段的模型建立程序使用這些叢集,更精確的進行商店/產品的缺貨預測。您可以在 SQL Server 2005 Analysis Services 使用資料採礦技術,更有效的進行這兩個階段。

本節將詳細說明整體的缺貨預測程序,先從建立模型化資料集的程序開始說明。接下來再討論評估資料採礦模型的方法 (這些模型是利用 SQL Server 2005 Analysis Services 所建構)。

建立缺貨預測模型的程序

建立缺貨模型的問題,要從兩個階段加以討論。

第 1 階段是將總體銷售型態相似的商店編成一組。將總體銷售型態相似的商店編組的程序,稱為「商店叢集」。商店叢集是利用 SQL Server 2005 Analysis Services 所附隨的 Microsoft Clustering 演算法,將總體銷售型態相似的商店編成一組。當您將 Microsoft Clustering 演算法套用到由總體銷售型態組成的資料集時,演算法是根據「屬於同一叢集的商店,比屬於不同叢集的商店更類似」的原則,將商店編成叢集。模型化資料集,是以衍生自資料倉儲的總體銷售資料為根據。因此,這個總體銷售資料是以商店分組所用的「相似性」度量來計算。

然後再利用這個在第 1 階段產生的叢集模型,在第 2 階段建立更精確的缺貨預測模型。此舉可讓預測演算法 (例如,Microsoft Decision Trees 或 Microsoft Neural Networks) 利用叢集結果,提高預測的精確度。基本上,在預測商店 s 的產品 p 時,SQL Server 2005 中的預測演算法可以利用下面這項事實,將預測結果最佳化:在類似的商店 s 販賣同一種產品 p,可以幫助我們在判斷商店 s 的 p 是否缺貨時,提高預測的精確度。

建構產品 p 缺貨預測模型的高階步驟

利用 SQL Server 2005 Analysis Services 建立最佳預測模型的兩階段程序,包含下列兩個高階步驟。我們將在下面幾節詳細說明這兩個步驟。

  1. 在資料倉儲的產品資訊 (維度) 部份使用產品階層,來決定產品 p 的產品類別 c(p)。我們假設同一類別的產品,在連鎖商店都具有類似的總體銷售型態。因此產品階層是用來識別產品 p 的相似產品集 c(p)。另外,您也可以利用產品叢集方法,根據產品在連銷店的銷售情形將它們編成叢集,來決定由資料驅動的產品分組 (類似 p 的產品)。

  2. 準備模型化資料集 Dcluster,讓商店叢集抓取在第 1 步驟決定之類別 c(p) 的商店層級屬性和銷售情形。

  3. 將 Microsoft Clustering 演算法套用到資料集 Dcluster,以取得商店的 k 叢集 (群組),那些商店在類別 c(p) 都具有類似的商店層級屬性和銷售情形。

  4. 針對在步驟 3 取得的每一個叢集 l = 1,…,k:

    1. 將 S(l) 作為屬於叢集 1 的商店集。記不記得這些商店在類別 c(p) 都具有相似的類別總體銷售量?

    2. 建立一個資料集 DOOS(p,S(l)),這個資料集含有 S(l) 中每家商店 s 的過去和目前每週銷售總額,以及每週銷售總額的變化。此外,還要加入布林旗標,指出產品 p 在未來一週和兩週內是否還有庫存,或者即將缺貨。

    3. 將 SQL Server 2005 Analysis Services 中的預測模型化演算法 (例如,Microsoft Decision Trees 或 Microsoft Neural Networks),套用到資料集 DOOS(p,S(l))。請使用過去和目前每週銷售總額作為輸入屬性,以及使用一週和兩週缺貨布林旗標作為輸出或 Predict-Only 屬性。此舉會指示 SQL Server 2005 Analysis Services 產生一個模型,將過去和目前每週銷售額以及每週銷售額的變化作為其輸入,然後進行布林旗標預測,指出產品 p 在未來一週和兩週是否會缺貨。

我們將在下面兩節詳細說明準備資料和建立模型的步驟。

在 Project REAL 中,零售商是 Barnes & Noble。Project REAL (為 Reference implementation (參考實作)、End-to-end (端對端)、At scale、和 Lots of users (眾多使用者) 的字頭縮寫) 是 Microsoft Corporation、Apollo Data Technologies 聯合其他以建立 BI 系統之可參考實作為目標的精英科技公司 (包括 UNISYS、EMC2、ProClarity、Panorama、Scalability Experts 和 Intellinet) 共同合作的專案。

Project REAL 合作廠商是採用 Barnes & Noble 所提供的真實企業資料,因此能夠探索最佳作法,來建立以 Microsoft SQL Server 2005 為基礎的 BI 應用程式。這個完整系統是藉由全面分析大型資料集,來模擬所有的客戶經營挑戰。

重點集中在下列五種產品 (書籍),所有的產品都屬於同一個類別 (青少年文學書籍)。

  • 《Captain Underpants & The Invasion of the Incredibly Naughty Cafeteria Ladies from Outer Space》(Captain Underpants 系列)

  • 《Junie B Jones Is a Graduation Girl》

  • 《Dinosaurs:A Nonfiction Companion to Dinosaurs Before Dark》(Magic Tree House Research Guide 系列 #1)

  • 《City in the Clouds》(Secrets of Droon 系列 #4)

  • 《Twisters and Other Terrible Storms》(Magic Tree House Research Guide 系列)

第 1 階段:商店叢集

不知道您記不記得商店叢集的目標,是取得幾組具有類似銷售型態的商店,注意產品 p 所屬類別 (c(p)) 的產品銷售。

第 1 階段一開始先建構商店叢集所要用的資料集。若要盡量減低對現場零售銷售和庫存資料倉儲的計算影響,我們建議您另外建立一個 SQL 資料庫,來儲存以 SQL Server 2005 Analysis Services 建立模型所用的資料集。

建構商店叢集資料集

商店叢集所用的資料集,是由 2004 年 1 月到 2004 年 12 月之間的商店層級總銷售額所組成。這個資料集包含一個資料表和索引鍵「StoreID」。「StoreID」是一個整數,可以唯一識別連鎖商店中的每一家商店。

由於商店叢集工作的目標,是根據總體銷售型態的相似度將商店分組,因此我們與零售商合作,找出一組可用於這個練習的總體銷售屬性。這組建立模型所用的屬性類型和資訊內容,通常會影響產生的輸出模型。在製作建立模型所用的屬性時,我們發現最好能與確實掌握基本商務程序的利害關係人合作。此外,我們可以根據在零售垂直市場完成的工作,推薦我們覺得有用的屬性。對於每一家商店來說,屬性是根據資料倉儲中的事實資料加以彙總的。這些銷售總額如下:如需所有用於商店叢集問題之商店層級屬性的詳細說明,請參閱〈附錄 A〉。

  • 產品 (書籍) p 所屬類別 (在上一節為 c(p)) 的類別專屬衍生屬性。包括:

    • Category Average Weekly Modeled:該類別書籍預計在某家商店每週售出的預估數量。

    • Category Average Weekly On Hand:該類別書籍在某家商店每週庫存現貨的平均數量。

    • Category Average Weekly On Order:該類別書籍在某家商店每週訂購的平均數量。

    • Category Fraction Holiday Sales:類別 c(p) 的書籍在某家商店部份假日的總銷售量。請注意,假日銷售的時段是在 2004 年 11 月 15 日到 2004 年 12 月底之間。

    • Category Fraction Sales:類別 c(p) 的書籍在某家商店部份非假日的總銷售量。請注意,非假日銷售的時段是在 2004 年 1 月 1 日到 2004 年 11 月 14 日。

    • Category Holiday Discount Amount:類別 c(p) 的書籍在某家商店假日期間的總折扣金額。

    • Category Holiday Markdown Amount:類別c(p) 的書籍在某家商店假日期間的總減價金額。

    • Category Holiday Member Discount Amount:類別 c(p) 的書籍在某家商店假日期間的總會員折扣金額。

    • Category Holiday Sales Amount:類別 c(p) 的書籍在某家商店假日期間的總銷售金額。

    • Category Holiday Sales Quantity:類別 c(p) 的書籍在某家商店假日期間的總銷售數量。

    • Category Total Discount Amount:類別 c(p) 的書籍在某家商店非假日期間的總折扣金額。

    • Category Total Markdown Amount:類別 c(p) 的書籍在某家商店非假日期間的總減價金額。

    • Category Total Member Discount Amount:類別 c(p) 的書籍在某家商店非假日期間的總會員折扣金額。

    • Category Total Sales Amount:類別 c(p) 的書籍在某家商店非假日期間的總銷售金額。

    • Category Total Sales Quantity:類別 c(p) 的書籍在某家商店非假日期間的總銷售數量。

  • 下列每一種類別都計算了部份假日總銷售量 (例如,〈附錄 A〉的 Cat Frac Holiday Sales)。還有部份非假日總銷售量 (例如,〈附錄 A〉的 Cat Frac Sales 屬性)。根據零售商的回報,被視為達到高階整體銷售標準的類別有:Beginning Reader、BG Bestseller、BGCKBKS Under 15、BG Reference、Blank Books、Board Block Touch、Chapter Books、Christian Insp、Cooking、Current Affairs、Family Child Care、Fantasy、Fiction、Fiction PB Young Readers、Hist Biog、Humor、Juv Activity、Juv Christmas、Juv Series HC、Juv Series PB、Juv Work Books、Literature、Magazines、Management、Manga Japanese、Mystery、New Age、Newspapers、Pict Sty Bks、Pop Rock、Romance、Science Fiction、Self Improvement、Single Cards、Spinner、Techno Thriller Espionage 和 Teen Fiction。

  • 另外,下列商店層級總體銷售也列入計算範圍內。

    • Total Holiday Sales:假日期間該店售出的總書籍數量。

    • Total Sales:非假日期間該店售出的總書籍數量。

    • Total Weekly Average Modeled:該店每週預估平均售出的總書籍數量。

    • Total Weekly Average On Hand:該店每週平均庫存的總書籍量。

    • Total Weekly Average On Order:該店每週平均訂購的總書籍量。

  • 下列商店屬性也列入商店叢集資料集內:City、Linear Ft (商店櫃長的直線英呎數)、Square Feet (指商店) 和 State。

這些商店層級屬性和總體值,都是經由 SQL 加以計算,然後儲存在一個反正規化資料表中。請注意,這個資料表只能經由 SQL Server 2005 中的資料採礦元件來建立模型。如果公司希望持續更新商店叢集模型,我們就建議您自動建構這個反正規化表格,作為資料準備步驟。或者,您也可以改而定義一個檢視表,然後從正規化的事實和維度資料,建立一個反正規化的結果集。

該表格的每一資料列,是以唯一整數「StoreID」編製索引,並且在前一份清單所列以及在〈附錄 A〉詳細說明的每個屬性/彙總,各有一資料行代表它。而且商店必須具備營業一年以上的資格,才能進行商店叢集練習和缺貨模型化。這個零售商符合這些條件的商店有 794 家。這份商店叢集所用的 SQL Server 2005 關聯式資料表,總共有 846 個資料列和 100 個資料行 (其中 1 個資料行儲存 StoreID,另外 99 個資料行則儲存前一份屬性值清單所定義的屬性值)。

建構商店叢集採擷模型

在建構來源關聯式資料表之後,我們就繼續進行經由 Microsoft Visual Studio® 2005 建立商店叢集採擷模型的步驟。我們先在 Visual Studio 2005 建立 Analysis Services 專案,然後再建立一個連接到含有商店叢集資料集之 SQL Server 執行個體的 Data Source 物件。同時還要建立資料來源檢視表。這個資料來源檢視表只選取含有商店層級屬性和彙總屬性的資料表。請參閱 [圖 1]。

Dd159897.ipmvssas01(zh-tw,TechNet.10).gif

[圖 1]:商店叢集資料來源檢視表

在加入資料來源檢視表之後,商店叢集練習便建立一個新的採擷結構和採擷模型。採擷結構定義建構商店叢集模型所用的資料行結構。所有的屬性都被選為 Input 屬性,但是「Cat Fraction Sales」和「Cat Total Sales Qty」屬性除外。它們被選為 Predict (Input 和 Predictable)。請參閱 [圖 2]。

Dd159897.ipmvssas02(zh-tw,TechNet.10).gif

[圖 2]:商店叢集採擷結構

與 Microsoft Clustering 演算法有關的 CLUSTER_COUNT 參數,代表可在來源資料搜尋的叢集數上限。其預設值為 10。CLUSTER_COUNT 的目標是產生明確的叢集,充份抓取商店屬性中的關聯性,並且彙總銷售/庫存值,因此根據經驗以及針對含有 5 個叢集之叢集模型的品質評定結果,其值被改為 5。通常,分析人員需要更改 CLUSTER_COUNT 參數才能取得所要的結果。在這個應用程式中,我們發現當 CLUSTER_COUNT = 5 時,就會得出明確的商店叢集 (與彙總銷售的相似性有關)。此外,證據也顯示當 MINIMUM_SUPPORT = 50 時,這個應用程式的品質叢集模型較好。因此 Microsoft Clustering 演算法只會識別那些含有 50 個以上案例 (這個應用程式中的商店) 的叢集。同樣的,為了得出所要的叢集品質,分析人員也會更改 MINIMUM_SUPPORT。請參閱 [圖 3]。

Dd159897.ipmvssas03(zh-tw,TechNet.10).gif

[圖 3]:Microsoft Clustering 演算法參數

在設定 Microsoft Clustering 演算法的參數之後,就處理採擷結構,然後在 SQL Server 2005 Analysis Services 建立和擴展採擷模型物件。

評估商店叢集模型

在建構商店叢集模型之後,接著就利用 Microsoft SQL Server 2005 Analysis Server 叢集瀏覽器,判斷類別銷售型態是否能夠區別叢集,藉此評估商店叢集模型。

如需 SQL Server 2005 Analysis Services 發現的商店叢集摘要,請參閱 [圖 4]。商店叢集比較傾向以 Total Sales、Category Sales Quantity、Category Weekly Sales、Category Weekly On-Hand 和 On-Order 值加以區別。[圖 4] 的顯示內容是,以每個叢集來說,屬於某個叢集之商店的範例城市/州值 ([圖 4] 中的左欄),以及每個叢集的區別因素 ([圖 4] 中的右欄)。

Dd159897.ipmvssas04(zh-tw,TechNet.10).gif

[圖 4]:青少年文學書籍類別的商店叢集

請注意,您可以在 SQL Server 2005 Analysis Services 叢集模型檢視器使用 [區別] 索引標籤,來決定區別特性 (屬性/值) 組合(請參閱 [圖 5])。

Dd159897.ipmvssas05(zh-tw,TechNet.10).gif

[圖 5]:叢集模型區別檢視表

第 2 階段:建立缺貨預測模型

我們已經把具有相似類別銷售型態之商店分組所用的商店叢集模型建構完成,接下來要專攻一個問題,那就是預測某一本書在未來一個禮拜和兩個禮拜之內會不會缺貨。在建立採擷模型進行缺貨預測之前,我們先針對您所關心的每一個產品 (書籍),建構模型化資料集。

建構建立缺貨預測模型的資料集

缺貨預測模型工作所用的資料集,需要參考某一本書在零售連鎖店所有商店中的每週銷售資料。根據經驗和過去可用的資料量,我們開發出一個「滑動窗 (Sliding Window)」策略,來建立預測模型化所用的資料集。如果資料具有暫時性質 (比方說,預測未來),而且可預測數量是抽象類型 (例如,布林缺貨指示器或特賣),不妨採用「滑動窗 (Sliding Window)」策略作為資料準備策略。如果暫時資料很充分,而可預測數量原本就是數值,則不妨採用時間序列模型化策略。

下面是我們在探索資料並且著重問題內容時,所做出的觀察結果。以每週為一個時段,某一本書和某一家商店的過去銷售和庫存資料,一共產生出 52 筆記錄 (一年份的資料)。通常,只有一家商店和一個產品,很少會發生缺貨事件。若要取得精確的預測模型,訓練資料必須包含足量的缺貨事件以及庫存事件,才能找出區分兩者的趨勢。下面這個資料準備策略的目的,是針對整個連鎖商店的某個產品 p,取得足量的缺貨事件和庫存事件。我們加入商店叢集標籤 (衍生自商店叢集模型),讓預測模型化演算法在因商店叢集而異的缺貨行為中找出趨勢。

建構某一種產品 (書籍) p 的缺貨預測模型化資料集

請針對零售連鎖商店中的每一家商店 s,執行下列動作:

      在 2004 年 1 月 1 日到 2004 年 12 月 31 日之間的每一週:

  1. 產生一個唯一專屬商店/週識別碼。這就是缺貨模型化資料集的索引鍵。

  2. 商店 s 所屬的商店叢集標籤,這是由第 1 階段所說明的商店叢集模型所決定:商店叢集。

  3. 產品 (書籍) p 在商店 s 的當週銷售量 (CurrentWeekSales)。

  4. 產品 (書籍) p 在商店 s 的當週庫存量 (CurrentWeekOnHand)。

  5. 產品 (書籍) p 在商店 s 的當週訂購量 (CurrentWeekOnOrder)。

  6. 在商店 s 中,產品 (書籍) p 在當週之後一週 (未來) 的銷售量 (OneWeekAheadSales)。

  7. 在商店 s 中,產品 (書籍) p 在當週之後兩週 (未來) 的銷售量 (TwoWeeksAheadSales)。

  8. 在商店 s 中,產品 (書籍) p 在當週之前一週 (過去) 的銷售量 (OneWeekBackSales)。

  9. 在商店 s 中,產品 (書籍) p 在當週之前兩週 (過去) 的銷售量 (TwoWeeksBackSales)。

  10. 在商店 s 中,產品 (書籍) p 在當週之前三週 (過去) 的銷售量 (ThreeWeeksBackSales)。

  11. 在商店 s 中,產品 (書籍) p 在當週之前四週 (過去) 的銷售量 (FourWeeksBackSales)。

  12. 在商店 s 中,產品 (書籍) p 在當週之前五週 (過去) 的銷售量 (FiveWeeksBackSales)。

  13. 在商店 s 中,產品 (書籍) p 在當週之後一週 (未來) 的庫存數量 (OneWeekAheadOnHand)。

  14. 在商店 s 中,產品 (書籍) p 在當週之後兩週 (未來) 的庫存數量 (TwoWeekAheadOnHand)。

  15. 在商店 s 中,產品 (書籍) p 在當週之前一週 (過去) 的庫存數量 (OneWeekBackOnHand)。

  16. 在商店 s 中,產品 (書籍) p 在當週之前兩週 (過去) 的庫存數量 (TwoWeeksBackOnHand)。

  17. 在商店 s 中,產品 (書籍) p 在當週之前三週 (過去) 的庫存數量 (ThreeWeeksBackOnHand)。

  18. 在商店 s 中,產品 (書籍) p 在當週之前四週 (過去) 的庫存數量 (FourWeeksBackOnHand)。

  19. 在商店 s 中,產品 (書籍) p 在當週之前五週 (過去) 的庫存數量 (FiveWeeksBackOnHand)。

  20. 在商店 s 中,產品 (書籍) p 在當週之前一週 (過去) 的訂購數量 (OneWeekBackOnOrder)。

  21. 在商店 s 中,產品 (書籍) p 在當週之前兩週 (過去) 的訂購數量 (TwoWeeksBackOnOrder)。

  22. 在商店 s 中,產品 (書籍) p 在當週之後前三週 (過去) 的訂購數量 (ThreeWeeksBackOnOrder)。

  23. 在商店 s 中,產品 (書籍) p 在當週之前四週 (過去) 的訂購數量 (FourWeeksBackOnOrder)。

  24. 在商店 s 中,產品 (書籍) p 在當週之前五週 (過去) 的訂購數量 (FiveWeeksBackOnOrder)。

  25. 在商店 s 中,產品 (書籍) p 在後一週 (未來) 的特賣商品 (OneWeekSalesBin)。本練習所用的特賣商品有:

    1. 1 至 2 個

    2. 3 或 3 個以上

  26. 在商店 s 中,產品 (書籍) p 在後兩週 (未來) 的特賣商品 (TwoWeekSalesBin)。本練習所用的特賣商品有:

    1. 1 至 2 個

    2. 3 或 3 個以上

  27. 指出產品 (書籍) p 在一週後 (未來) 會不會缺貨的布林旗標 (OneWeekOOSBoolean)。

  28. 指出產品 (書籍) p 在兩週後 (未來) 會不會缺貨的布林旗標 (TwoWeekOOSBoolean)。

  29. 在商店 s 中,產品 (書籍) p 在當週與前一週 (過去) 之間的銷售量變化 (FirstWeekSalesChange)。

  30. 在商店 s 中,產品 (書籍) p 在當週前一週到前兩週 (過去) 之間的銷售量變化 (SecondWeekSalesChange)。

  31. 在商店 s 中,產品 (書籍) p 在當週前兩週到前三週 (過去) 之間的銷售量變化 (ThirdWeekSalesChange)。

  32. 在商店 s 中,產品 (書籍) p 在當週前三週到前四週 (過去) 之間的銷售量變化 (FourthWeekSalesChange)。

  33. 在商店 s 中,產品 (書籍) p 在當週前四週到前五週 (過去) 之間的銷售量變化 (FifthWeekSalesChange)。

這份屬性清單真是長得可以。在一般的資料採礦情況下,常常有數百甚至數千個以上的屬性,描述您要建立模型的實體。資料採礦演算法會找出適當的關聯性,做出精確的預測。由於適當的關聯性不是已知的「先驗 (a-priori)」,因此常常會把所有可能的屬性全部加入訓練資料集中。比方說,在預測布林旗標指出缺貨兩週時,可以使用下列屬性 (請參閱 [圖 13])。

  • Current Week On Hand

  • Four Weeks Back On Hand

  • One Week Back Sales

  • Current Week Sales

  • Cluster Label (取自商店叢集模型)

  • Four Weeks Back Sales

  • Five Weeks Back On Hand

  • Two Weeks Back Sales

不過,在建立模型之前,無法事先知道這些屬性彼此相關。

請注意,這個訓練表中,每一個商店/週的組合,都有一個資料列代表它。同時也請注意,屬性「FirstWeekSalesChange」、「SecondWeekSalesChange」、…、「FifthWeekSalesChange」可以幫助您大致估計每週銷售的第一個衍生值 (變更)。通常這些類型的屬性,都能提高模型的預測精確度。

若要更客觀的評估以 SQL Server 2005 Analysis Services 建立之模型的預測精確度,可以保留一部份的資料,稱之為「測試集」,這是很常見的作法。資料集其餘的資料則稱為「訓練資料集」。資料採礦模型是使用訓練資料集加以建構。接著就把從模型得出的預測,拿來與測試集的實際值加以比較。

如果資料是來自應用程式中的訓練資料集,我們使用資料集中,所有對應於 2004 年 1 月 1 日到 2004 年 11 月 30 日間之星期的記錄。如果是測試集,則使用資料集中,所有對應於 2004 年 12 月 1 日到 2004 年 12 月 31 日間之星期的記錄。

對應於某項產品 (書籍) p 的訓練資料集,總共有 10,635 個資料列。(請注意,在 2004 年 1 月 1 日到 2004 年 11 月 30 日間之星期的每一個商店/週組合,各有一個資料列代表它)。除了商店/週識別碼 (索引鍵) 資料行之外,訓練資料集還有 38 個資料行。其他資料行 (例如「Store_ID」和「Week_ID」) 也都包含在資料集中,但不用來建立模型。

對應於某項產品 (書籍) p 的測試資料集,總共有 2,442 個資料列。(請注意,在 2004 年 12 月 1 日到 2004 年 12 月 31 日間之星期的每一個商店/週組合,各有一個資料列代表它)。在測試資料集中,除了專屬的商店/週識別碼 (索引鍵) 之外,還有 38 個資料行。

建構缺貨採擷模型

在建構來源關聯式資料表之後,便經由 Visual Studio 2005 建立預測資料採礦模型。其作法是先建立 Analysis Service 專案和資料來源,針對所考慮的產品 (書籍),指定儲存該產品訓練資料表和測試資料表的 SQL Server 執行個體。接著便會建立一個資料來源檢視表,讓您選取所需的資料表。請參閱 [圖 6]。

Dd159897.ipmvssas06(zh-tw,TechNet.10).gif

[圖 6]:缺貨預測模型資料來源檢視表

在加入資料來源檢視表之後,會針對建立缺貨預測模型的練習,建立一個新的採擷結構。目前每週銷售、過去每週銷售、庫存和訂購等屬性,皆被指定為輸入。布林缺貨旗標和每週特賣屬性 (OneWeekOOSBoolean、TwoWeekOOSBoolean、OneWeekSalesBin、TwoWeekSalesBin) 則被指定為可預測 (Predict Only) 屬性。

Microsoft Decision Trees 和 Microsoft Neural Network 模型的目的,是判斷哪一個演算法會產生最精確的模型 (將預測與測試集的實際值相較)。只要建立第一個採擷結構和採擷模型之後 (指定輸入和可預測屬性),分析人員就可以很方便的加入其他採擷模型。(您可以利用 [新增採擷模型] 功能,試試不同的演算法)。請注意,在 [圖 7] 當中,Input 表示屬性值要作為預測性模型的輸入。PredictOnly 表示這些值應該由資料採礦模型加以預測。而 Key 則代表唯一識別相關案例的欄位。分析人員也可以將屬性設為類型 Predict。這個屬性類型指出,屬性被同時當作輸入和可預測屬性。(當它被用來預測另一個屬性值時,就被視為 Input 屬性)。

Dd159897.ipmvssas07(zh-tw,TechNet.10).gif

[圖 7]:採用 Microsoft Decision Trees 和 Neural Network 採擷模型的缺貨採擷結構

我們發現高精確度的預測性模型,是在我們變更 COMPLEXITY_PENALTY 和 MINIMUM_SUPPORT 的預設值時,利用 Microsoft Decision Trees 演算法取得。我們讓 COMPLEXITY_PENALTY = 0.10,得出較大 (較詳細) 的決策樹。決策樹越大越詳細,越能精確的建立訓練資料的模型,甚至在訓練資料建立「雜訊 (Noise)」的模型。這種情況稱為「過度膨脹」,通常會減損資料保管或資料測試集的預測結果。此外,決策樹越大越詳細,預測所需的計算工程也越繁複。MINIMUM_SUPPORT 的值也會降到 5 – 此舉可能會擴大決策樹。[圖 9] 所示範的就是這些變化。

Dd159897.ipmvssas08(zh-tw,TechNet.10).gif

[圖 8]:Microsoft Decision Trees 演算法參數

預測模型化結果

經驗結果

根據前面的說明,採擷模型的預測精確度,是透過測試集檢查它們加以評估的 (對應於 2004 年 12 月 1 日到 2004 年 12 月 31 日間之星期的資料)。

我們使用 SQL Server 2005 Analysis Services 中的增益圖功能,來評估採擷模型。增益圖可以提供針對某個資料採礦模型在指定資料集的預測效能,提供整體圖形。在這個案例當中,我們使用測試資料集來進行評估。增益圖是比較採擷模型與理想模型和隨機模型的預測效能。[圖 9] 所示範的,即為《Captain Underpants》一書的布林兩週缺貨預測的增益圖。這項工作是預測該書在零售鏈任何一家商店的未來兩週內是否還有庫存,以 true/false 值表示。請注意,這個模型的整體預測精確度,很接近理想模型。

Dd159897.ipmvssas09(zh-tw,TechNet.10).gif

[圖 9]:兩週布林缺貨預測的增益圖

[圖 10] 大致說明商店/週組合的預測效能 (如果該書在未來兩週內真的缺貨時)。

Dd159897.ipmvssas10(zh-tw,TechNet.10).gif

[圖 10]:累計獲益圖 – 辨識商店/週組合的效能 (如果該產品在未來兩週內真的缺貨時)

[圖 11] 以圖形描述預測兩週缺貨布林值的 Microsoft Decision Trees 演算法

Dd159897.ipmvssas11(zh-tw,TechNet.10).gif

[圖 11]:《Captain Underpants》的兩週 OOS 決策樹

[圖 12] 針對所有這項工作所考慮的五種產品 (書籍),摘要說明其預測精確度。SQL Server 2005 Analysis Services 所取得的資料採礦模型,它在預測某一本書在未來一週內會不會缺貨的精確度平圴為 98.52%。預測該書在未來兩週內會不會缺貨,其精確度平均為 86.45%。在預測實際的特賣值時,預測精確度會上揚。

Dd159897.ipmvssas12(zh-tw,TechNet.10).gif

[圖 12]:五種產品 (書籍) 的缺貨預測精確度

銷售良機

根據預測模型的保守估計指出,錯失 3,405.48 美元到 6,810.95 美元之間的銷售良機,相當於一到兩本書的版權費。如果在年初便部署這些模型,就不致於錯失這些銷售良機了。請參閱 [圖 13]。

Dd159897.ipmvssas13(zh-tw,TechNet.10).gif

[圖 13]:銷售良機

計算每個項目錯失多少銷售良機的方法,是將缺貨 (OOS) 總商店週數,乘以兩週布林預測值。如果已經部署這些模型的話,此舉便會產生新的 OOS 商店週數。將 OOS 預測值乘以該年度實際書籍銷售量的百分比再乘以個別的零售價格,就得出總銷售良機了。

銷售良機公式

(# of total OOS weeks for all stores) x (2-week Boolean predicted accuracy)X (% of actual sales across all stores) x (retail price)= Yearly increase in sales opportunity using Apollo OOS predictions

如果您將這些數字外推到總零售業務,便會驚見銷售良機相當可觀。如果實作庫存預測模型的話,也許能夠提高數百萬美金的銷售量也說不定。

將庫存預測自動化

SQL Server 2005 Integration Services 已經納入資料採礦功能。因此您可以利用 Integration Services,將每週或每月缺貨預測的程序自動化。這些預測可以為很可能面臨缺貨窘境的零售商,提供商店/產品組合的最新報告。

Apollo Data Technologies 建議您不只將定期取得缺貨預測的程序自動化,同時也將評估預測模型效能的程序自動化。後者可以幫助您判斷訓練資料採礦模型的預測精確度,是否降到無法接受的程度。如果訓練缺貨預測模型降到規定的預測精確度之下,很可能是 SQL Server 2005 資料採礦模型所擷取的趨勢和型態已經改變了。這時候,就必須建構和調整新的模型了。

將缺貨預測自動化

缺貨預測模型可讓零售商更加了解未來一到兩週可能發生的缺貨情況。使用部署缺貨預測技術的一般基本架構時,必須每週或每月定期更新缺貨預測。

如果您所產生的產品/商店組合,很可能會遇到缺貨狀況,可以利用 SQL Server 2005 Integration Services 實作該程序。您可以實作和排定下述工作流程時間表,完成這項作業。

產生可能缺貨的產品/商店組合
請針對每樣有興趣的產品 p,執行下列動作:

  1. 查詢資料倉儲中的「產品」維度資訊,來決定產品 p 所屬的類別 c(p)。

  2. 根據類別 c(p) 的銷售量,決定零售商店分組所用的商店叢集模型名稱。您可以查詢查閱資料表,完成這項工作。

  3. 如果之前從未考慮過產品 p,請根據 <建構建立缺貨預測模型的程序> 中的說明,為產品 p 建立一個新的預測模型資料集。如果之前曾經考慮過產品 p,請將資料列附加到產品 p 的預測模型資料集後面。新的資料列對應到新的商店/週組合。

  4. 決定產品 p 的 SQL Server 2005 Analysis Services 缺貨預測模型名稱。您可以查詢查閱資料表,完成這項工作。

  5. 利用 SQL Server Integration Services Prediction Join 工作,執行預測聯結,以便將缺貨擷取到或寫入關聯式資料表或 OLAP Cube。如需有關取得缺貨預測所用之 DMX Prediction Join 的詳細資訊,請參閱〈附錄 B〉。

將預測精確度自動化

您一定要不時測量缺貨預測模型的效能,以確保支援零售庫存決策所用的資訊,盡量保持在最新且最精確的狀態。為此,我們實作一個系統,將實際的庫存等級關聯到模型所預測的庫存等級。如果預測值與實際等級一致,就表示已經在預測模型取得一個信賴等級。

同樣的,您也可以利用 SQL Server 2005 Integration Services,測量預測銷售等級和實際銷售值之間的一致性。當產品/商店/週組合的預測「sales-bin」值 (根據 <將缺貨預測自動化> 的討論,這些值會在取得缺貨預測時,被寫到資料表中) 與實際的銷售等級,在資料倉儲中報告和更新時,只要將兩者互相比較,即可測量兩者之間的一致性。

您可以累加預測值與實際銷售值 (sales-bins) 一致的次數,讓零售商感受到預測模型的精確度。如果精確度低於臨界值之下,缺貨預測模型 (可能還有商店叢集模型) 就必須重新建立並且重新調整了。預測結果不正確,可能是因為最近建立的模型,一時還抓不到最近變化莫測的銷售趨勢。

結論

本文將說明如何利用 SQL Server 2005 Analysis Services 建立零售缺貨預測模型。當這些模型套用到 Project REAL 資料時,會針對列入考慮的項目,產生非常精確的預測。如果模型已經部署一整年,根據保守估計,這個零售商就不會因為犯下錯失銷售良機的錯誤,而損失數千元美金的收益。如果將這些數字外推至總零售產品線,銷售良機很可能會提高數百萬美金的收益,相當吸引人。本文也建議您利用 SQL Server 2005 Integration Services,將模型預測和精確度測量自動化,並且將它們實作到實務應用程式。

其他相關資訊:

http://www.microsoft.com/taiwan/sql/

本文對您有任何幫助嗎?請不吝賜教。從 1 (劣) 到 5 (優) 評分,您會給這篇文章打幾分

〈附錄 A:商店叢集屬性〉

本表所列的是衍生自 Project REAL 資料倉儲的商店層級屬性。

[表 1]:商店叢集屬性

屬性名稱

Beg Reader PB Cat Frac Holiday Sales

Beg Reader PB Cat Frac Sales

BG Bestseller510 Cat Frac Holiday Sales

BG Bestseller510 Cat Frac Sales

BGCKBKS Under15 Cat Frac Holiday Sales

BGCKBKS Under15 Cat Frac Sales

BG Reference Cat Frac Holiday Sales

BG Reference Cat Frac Sales

Blank Books Cat Frac Holiday Sales

Blank Books Cat Frac Sales

Board Block Touch Cat Frac Holiday Sales

Board Block Touch Cat Frac Sales

Cat Avg Weekly Modeled

Cat Avg Weekly On Hand

Cat Avg Weekly On Order

Cat Fraction Holiday Sales

Cat Fraction Sales

Cat Holiday Disc Amt

Cat Holiday Markdown Amt

Cat Holiday Member Disc Amt

Cat Holiday Sales Amt

Cat Holiday Sales Qty

Cat Total Disc Amt

Cat Total Markdown Amt

Cat Total Member Disc Amt

Cat Total Sales Amt

Cat Total Sales Qty

Chapter Books Cat Frac Holiday Sales

Chapter Books Cat Frac Sales

Christian Insp Cat Frac Holiday Sales

Christian Insp Cat Frac Sales

City

Cooking Cat Frac Holiday Sales

Cooking Cat Frac Sales

Current Affairs Cat Frac Holiday Sales

Current Affairs Cat Frac Sales

Family Child Care Cat Frac Holiday Sales

Family Child Care Cat Frac Sales

Fantasy Cat Frac Holiday Sales

Fantasy Cat Frac Sales

Fiction Cat Frac Holiday Sales

Fiction Cat Frac Sales

Fiction Literary Cat Frac Holiday Sales

Fiction Literary Cat Frac Sales

Fiction PB Young Readers Cat Frac Holiday Sales

Fiction PB Young Readers Cat Frac Sales

Hist Biog Cat Frac Holiday Sales

Hist Biog Cat Frac Sales

Humor Cat Frac Holiday Sales

Humor Cat Frac Sales

Juv Activity Cat Frac Holiday Sales

Juv Activity Cat Frac Sales

Juv Christmas Cat Frac Holiday Sales

Juv Christmas Cat Frac Sales

Juv Series HC Cat Frac Holiday Sales

Juv Series HC Cat Frac Sales

Juv Series PB Cat Frac Holiday Sales

Juv Series PB Cat Frac Sales

Juv Work Books Cat Frac Holiday Sales

Juv Work Books Cat Frac Sales

Linear Ft

Literature Cat Frac Holiday Sales

Literature Cat Frac Sales

Magazines Cat Frac Holiday Sales

Magazines Cat Frac Sales

Management Cat Frac Holiday Sales

Management Cat Frac Sales

Manga Japanese Comics Cat Frac Holiday Sales

Manga Japanese Comics Cat Frac Sales

Mystery Cat Frac Sales

New Age Cat Frac Holiday Sales

New Age Cat Frac Sales

Newspapers Cat Frac Holiday Sales

Newspapers Cat Frac Sales

Pict Sty Bks HC Cat Frac Holiday Sales

Pict Sty Bks HC Cat Frac Sales

Pict Sty Bks PB Cat Frac Holiday Sales

Pict Sty Bks PB Cat Frac Sales

Pop Rock Cat Frac Holiday Sales

Pop Rock Cat Frac Sales

Romance Cat Frac Holiday Sales

Romance Cat Frac Sales

Science Fiction Cat Frac Holiday Sales

Science Fiction Cat Frac Sales

Self Improvement Cat Frac Holiday Sales

Self Improvement Cat Frac Sales

Single Cards Cat Frac Holiday Sales

Single Cards Cat Frac Sales

Spinner Cat Frac Holiday Sales

Spinner Cat Frac Sales

Square Feet

State

Techno Thriller Espionage Cat Frac Holiday Sales

Techno Thriller Espionage Cat Frac Sales

Teen Fiction Cat Frac Holiday Sales

Teen Fiction Cat Frac Sales

Total Holiday Sales

Total Sales

Total Weekly Avg Modeled

Total Weekly Avg On Hand

Total Weekly Avg On Order

〈附錄 B:缺貨 DMX 查詢〉

下面是取得缺貨預測所用的 DMX 查詢。

SELECT
  t.[Unique_Store_Week_ID],
  [CBCaptainUnderpantsDT].[One Week OOS Boolean],
  PredictProbability([CBCaptainUnderpantsDT].[One Week OOS Boolean]),
  [CBCaptainUnderpantsDT].[One Week Sales Bin],
  PredictProbability([CBCaptainUnderpantsDT].[One Week Sales Bin]),
  [CBCaptainUnderpantsDT].[Two Week OOS Boolean],
  PredictProbability([CBCaptainUnderpantsDT].[Two Week OOS Boolean]),
  [CBCaptainUnderpantsDT].[Two Week Sales Bin],
  PredictProbability([CBCaptainUnderpantsDT].[Two Week Sales Bin])
From
  [CBCaptainUnderpantsDT]
PREDICTION JOIN
  OPENQUERY([ApolloDWSDM],
    'SELECT
      [Unique_Store_Week_ID],
      [ChapterBooksCluster],
      [CurrentWeekSales],
      [CurrentWeekOnHand],
      [CurrentWeekOnOrder],
      [OneWeekBackSales],
      [TwoWeeksBackSales],
      [ThreeWeeksBackSales],
      [FourWeeksBackSales],
      [FiveWeeksBackSales],
      [OneWeekBackOnHand],
      [TwoWeeksBackOnHand],
      [ThreeWeeksBackOnHand],
      [FourWeeksBackOnHand],
      [FiveWeeksBackOnHand],
      [OneWeekBackOnOrder],
      [TwoWeeksBackOnOrder],
      [ThreeWeeksBackOnOrder],
      [FourWeeksBackOnOrder],
      [FiveWeeksBackOnOrder],
      [OneWeekSalesBin],
      [OneWeekOOSBoolean],
      [TwoWeekSalesBin],
      [TwoWeekOOSBoolean],
      [FirstWeekSalesChange],
      [SecondWeekSalesChange],
      [ThirdWeekSalesChange],
      [FourthWeekSalesChange],
      [FifthWeekSalesChange]
    FROM
      [dbo].[CB_CaptainUnderpants_Testing2]
    ') AS t
ON
  [CBCaptainUnderpantsDT].[Chapter Books Cluster] = t.[ChapterBooksCluster] AND
  [CBCaptainUnderpantsDT].[Current Week Sales] = t.[CurrentWeekSales] AND
  [CBCaptainUnderpantsDT].[Current Week On Hand] = t.[CurrentWeekOnHand] AND
  [CBCaptainUnderpantsDT].[Current Week On Order] = t.[CurrentWeekOnOrder] AND
  [CBCaptainUnderpantsDT].[One Week Back Sales] = t.[OneWeekBackSales] AND
  [CBCaptainUnderpantsDT].[Two Weeks Back Sales] = t.[TwoWeeksBackSales] AND
  [CBCaptainUnderpantsDT].[Three Weeks Back Sales] = t.[ThreeWeeksBackSales] AND
  [CBCaptainUnderpantsDT].[Four Weeks Back Sales] = t.[FourWeeksBackSales] AND
  [CBCaptainUnderpantsDT].[Five Weeks Back Sales] = t.[FiveWeeksBackSales] AND
  [CBCaptainUnderpantsDT].[One Week Back On Hand] = t.[OneWeekBackOnHand] AND
  [CBCaptainUnderpantsDT].[Two Weeks Back On Hand] = t.[TwoWeeksBackOnHand] AND
  [CBCaptainUnderpantsDT].[Three Weeks Back On Hand] = t.[ThreeWeeksBackOnHand] AND
  [CBCaptainUnderpantsDT].[Four Weeks Back On Hand] = t.[FourWeeksBackOnHand] AND
  [CBCaptainUnderpantsDT].[Five Weeks Back On Hand] = t.[FiveWeeksBackOnHand] AND
  [CBCaptainUnderpantsDT].[One Week Back On Order] = t.[OneWeekBackOnOrder] AND
  [CBCaptainUnderpantsDT].[Two Weeks Back On Order] = t.[TwoWeeksBackOnOrder] AND
  [CBCaptainUnderpantsDT].[Three Weeks Back On Order] = t.[ThreeWeeksBackOnOrder] AND
  [CBCaptainUnderpantsDT].[Four Weeks Back On Order] = t.[FourWeeksBackOnOrder] AND
  [CBCaptainUnderpantsDT].[Five Weeks Back On Order] = t.[FiveWeeksBackOnOrder] AND
  [CBCaptainUnderpantsDT].[One Week Sales Bin] = t.[OneWeekSalesBin] AND
  [CBCaptainUnderpantsDT].[One Week OOS Boolean] = t.[OneWeekOOSBoolean] AND
  [CBCaptainUnderpantsDT].[Two Week Sales Bin] = t.[TwoWeekSalesBin] AND
  [CBCaptainUnderpantsDT].[Two Week OOS Boolean] = t.[TwoWeekOOSBoolean] AND
  [CBCaptainUnderpantsDT].[First Week Sales Change] = t.[FirstWeekSalesChange] AND
  [CBCaptainUnderpantsDT].[Second Week Sales Change] = t.[SecondWeekSalesChange] AND
  [CBCaptainUnderpantsDT].[Third Week Sales Change] = t.[ThirdWeekSalesChange] AND
  [CBCaptainUnderpantsDT].[Fourth Week Sales Change] = t.[FourthWeekSalesChange] AND
  [CBCaptainUnderpantsDT].[Fifth Week Sales Change] = t.[FifthWeekSalesChange]
下载

Dd159897.icon_Word(zh-tw,TechNet.10).gif經由 Microsoft SQL Server 2005 Analysis Services 建立庫存預測模型
672 kb
Microsoft Word 文件

顯示: