使用SQL Server Analysis Services數據挖掘的關聯規則實現商品推薦功能(三)


假如你有一個購物類的網站,那么你如何給你的客戶來推薦產品呢?這個功能在很多電商類網站都有,那么,通過SQL Server Analysis Services的數據挖掘功能,你也可以輕松的來構建類似的功能。

 

將分為三個部分來演示如何實現這個功能。

1.構建挖掘模型

2.為挖掘模型編寫服務接口

3.開發簡單的前端應用

 

 

 

此篇在上兩篇已經構建好挖掘模型和服務層的基礎之上,介紹如何構構建簡單的前端應用來做商品推薦功能。

 

由於我們用的是Web服務的方法來封裝挖掘模型的查詢,所以理論上這個服務可以被很多客戶端應用程序訪問,比如ASP.NET, winform和WPF等,這里我們選擇Silverlight 5。

Silverlight 5是跟FLASH差不多的東西,是微軟平台下的RIA方案。在這個平台下我們可以通過XAML開發出絢麗的應用程序。

雖然它的光輝已經快被HTML5所掩蓋,而且微軟也停止了后續版本的更新,全力的投入到HTML5中,但是HTML5成型還尚早,在企業開發中,Silverlight還是有十足的魅力和足夠的優勢以及強大的開發工具支持。

當然,如果你得項目是ASP.NET或者其它類型的項目,那么也可以參考此篇來進行操作。實際上此篇對於一個有經驗的前端開發人員意義不大,因為這里主要講的是如何調用一個Web服務。但作為一個系列考慮到每個人的側重點都不同,為了做一個整體的介紹,所以這里還將細致到每一步的操作。

 

打開上一篇中建立的項目,右鍵項目上方的解決方案名稱,菜單中選擇Add->New Project。

選擇Silverlight Application,點OK。

然后指定Silverlight的版本,這里默認直接點OK就可以。

然后可以看到一個新的Silverlight項目被添加到解決方案中。

接下來添加服務引用,就是引用上一篇中創建的服務。

右鍵Silverlight項目,選擇Add Service Reference。

由於服務所在的項目和Silverlight項目在同以解決方案下,所以這里直接點擊Discover就可以自動找到上一篇中建立的服務的地址。

點擊OK后,可以在 Solution Explorer中看到一個服務引用被添加了進來。

正如上一篇介紹,系統根據服務的SOAP協議里定義的內容,在本地自動生成了一個代理類,這樣Silverlight端就可以像調用本地的方法一樣來調用 Web服務里的內容。

然后,在Silverlight簡單放幾個空間。如圖,首先放置一個ListBox控件來讓用戶選擇已經購買了什么產品。在一個電商網站中,這里就相當於一個購物車,里面記錄了用戶已經選擇了什么商品。

在ListBox右面放置一個按鈕,通過單擊這個按鈕觸發預測的查詢。后台的代碼將調用Web服務來訪問挖掘模型做預測從而返回推薦數據。

最后在下面放置一個DataGrid控件,這里面接收Web服務返回的推薦結果集。

下面的前端XAML代碼供大家參考,前面界面拖拽的控件都會有對應的XAML代碼:

<UserControl

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="SilverlightApplication1.MainPage"

mc:Ignorable="d"

d:DesignHeight="300" d:DesignWidth="400">

 

<Grid x:Name="LayoutRoot" Background="White">

<ListBox x:Name="lbProduct" HorizontalAlignment="Left" Height="159" Margin="10,10,0,0" VerticalAlignment="Top" Width="165" SelectionMode="Multiple"/>

<sdk:DataGrid x:Name="dgResult" HorizontalAlignment="Left" Height="100" Margin="10,190,0,0" VerticalAlignment="Top" Width="247"/>

<Button x:Name="btnStart" Content="推薦" HorizontalAlignment="Left" Height="32" Margin="197,137,0,0" VerticalAlignment="Top" Width="106"/>

 

</Grid>

</UserControl>

然后,進入到界面的代碼模式中。

主要是要添加服務引用的命名空間,然后在類里聲明並且實例化訪問服務需要用到的SoapClient類。

然后,在代碼模式的類里面,添加如下代碼:

public MainPage()

{

InitializeComponent();

 

List<string> ProdSource = new List<string>();

ProdSource.Add("Touring Tire");

ProdSource.Add("Touring Tire Tube");

ProdSource.Add("Water Bottle");

ProdSource.Add("Bike Wash");

ProdSource.Add("Classic Vest");

ProdSource.Add("Cycling Cap");

ProdSource.Add("HL Road Tire");

ProdSource.Add("Hydration Pack");

ProdSource.Add("LL Road Tire");

 

lbProduct.ItemsSource = ProdSource;

 

btnStart.Click += btnStart_Click;

 

sc.GetModelResultCompleted += sc_GetModelResultCompleted;

}

 

void sc_GetModelResultCompleted(object sender, GetModelResultCompletedEventArgs e)

{

dgResult.ItemsSource = e.Result;

}

 

void btnStart_Click(object sender, RoutedEventArgs e)

{

ArrayOfString modelList=new ArrayOfString();

 

foreach (object item in lbProduct.SelectedItems)

{

modelList.Add(item.ToString());

}

 

 

sc.GetModelResultAsync(modelList);

}

在構造函數中,為了簡便我手動的添加了幾個可選的商品。實際項目中這里應該從數據庫里加在商品列表,這里只做簡單演示。有興趣的朋友可以自己試一下從Adventure Works的產品表里讀取。

由於Silverlight調用服務的方式是異步的,所以需要首先指定服務調用完成后,"跳轉"到哪個方法來對服務的結果進行處理。

然后在按鈕的Click事件里,組織好需要傳遞的商品列表參數,通過調用GetModelResultAsync方法開始對服務進行調用。

留意下前篇服務定義中接收的參數是List,在客戶端這邊被自動轉成了ArrarOfString。

 

添加完如上代碼之后,就可以通過前段界面測試下我們的預測查詢了。

我們可以看到通過選擇不同的商品,基於挖掘模型,會給我們推薦不同的產品。

 

 

至此這個簡單的前端應用就開發完畢了。這個應用很簡單,但是大家可以參考這個方法來將其加入到自己的功能體系當中。

 

關於通過關聯規則來做產品推薦的功能,這一系列的隨筆終於告一段落。不得不說,這三篇中每一篇都很粗很雜,但希望通過這些簡單的模型,能給大家以啟發,如何把類似的功能加入到自己的網站或者系統當中。

就這個預測功能,很多平台的處理方法我都感覺過於簡單,比如推薦的商品也只只是通過你瀏覽了一個類目下的產品,那么就不定期的給你推薦同類目下的其它產品,實際上並沒有達到很好的推薦效果。而通過挖掘模型中發現的規律,所推薦的商品都是有歷史數據根據的,相對來說准確度會更高一些。當然,前提是你已經擁有了足夠的海量歷史訂單數據,正所謂巧婦難為無米之炊,並且這些數據的質量足夠高,而且你的業務足夠清晰。這些都是一個商業智能項目成敗的關鍵。

希望這三篇能幫到大家。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM