Iedereen kent de websites wel waarbij andere producten worden aanbevolen op basis van andere producten die in het winkelwagentje zitten. ‘Onder water’ wordt hiervoor gebruik gemaakt van algoritmes die associaties onderzoeken tussen de producten die vaak samen worden verkocht. Op basis van gevonden associaties voorspelt het algoritme welke producten de klant nog meer interessant vindt.
In deze blog werken we een voorbeeld uit hoe een dergelijk algoritme kan worden ingezet met behulp van SQL Server Analysis Services. We maken hierbij gebruik van een demo dataset met twee tabellen. Eén tabel met circa 130.000 unieke ordernummers en één tabel met hierbij behorende orderregels (circa 820.000 regels).
We zullen een algoritme ontwikkelen waarmee we kunnen voorspellen welke artikelen kunnen worden aanbevolen op basis van de input van een willekeurig artikel.
Aanmaken Analysis Service Project
We beginnen met het aanmaken van een nieuw project in SQL Service Analysis Services (SSAS) genaamd MarketBasket.
Data Source en Data View
Allereerst gaan we verbinding maken met de database en de gegevens uit onze demoset inlezen.
In de Solution Explorer klikken we met de rechter muisknop op Data Source en vervolgens op New Data source.
In de data source wizard maken we verbinding met de database waar de tabellen uit onze demoset zijn opgeslagen.
Bij de autorisatie opties selecteren we de optie Use the service account om verbinding te maken met de database.
Na geklikt te hebben op Next en vervolgens op Finish, hebben we de data verbinding aangemaakt. In de volgende stap worden de tabellen ingelezen in een data source view.
In de Solution Explorer maken we een nieuwe view aan via de rechtermuisknop op Data Source Views en dan New Data source View.
We selecteren de zojuist aangemaakte data source en vervolgens Next.
In de database is een relatie aangemaakt tussen de twee tabellen op basis van het ordernummer. De relatie wordt automatisch herkend door SSAS.
Zorg dat het vinkje bij Create logical relationship by matching columns is aangevinkt zodat de verbinding tussen de tabellen goed wordt meegenomen.
In het volgende scherm selecteren we de twee tabellen die we mee willen nemen: Orders en OrderRegels.
Ook de data view is nu aangemaakt.
Aanmaken Mining Structure
We gaan nu de Mining structure aanmaken. De Mining structure is het algoritme op basis waarvan SSAS aan de slag gaat om de relaties tussen de verschillende items te vinden.
In de Solution Explorer klikken we met de rechtermuis op Mining structures en dan op New mining structure.
Vervolgens selecteren we de optie From Existing database or dataware house.
De Data mining techniek die we hier gebruiken is de Microsoft Association Rules.
Voor meer technische informatie over dit algoritme, kun je deze link bezoeken: https://msdn.microsoft.com/en-us/library/ms174916(v=sql.120).aspx.
In het volgende scherm selecteren we de aangemaakte data source view waarin de tabellen Orders en Orderregels zijn opgenomen.
In de volgende stap worden de Tabel types aangegeven. De Order tabel bevat in onze geval de Cases en de Orderregel tabel markeren we als Nested.
Nu kunnen de kolommen worden gespecificeerd die door het algoritme worden gebruikt.
We kunnen kiezen uit de volgende opties:
- Key: dit is een sleutelveld waarmee een regel uniek kan worden geïdentificeerd. Per tabel moet altijd 1 uniek veld worden geselecteerd;
- Input: dit is het veld die als input voor de analyse wordt gebruikt;
- Predict: dit is het veld dat we willen gaan voorspellen.
De Key kolom voor de Order tabel is het veld Ordernummer.
In de Orderregel tabel selecteren we alle drie de opties bij het veld sArtikelKey
Controleer dat het data type in het volgende scherm is ingesteld op Tekst.
Het percentage dat gebruikt moet worden als Test set zetten we op 0%. Deze optie hebben we bij dit algoritme niet nodig.
In het volgende scherm kan een naam aan het Mining model en de Mining structure worden gegeven. Het vinkje bij Allow drill through zetten we aan, zodat we later ook nog kunnen inzoomen naar individuele cases.
De Mining structure moet nu worden verwerkt naar de Analysis Services database, zodat het algoritme zijn werk kan doen.
Het verwerken van de database wordt opgestart door in het tabblad Mining structure linksbovenin op het icoontje voor Process the mining structure te klikken
Bij de volgende melding klikken we op Yes, zodat het project wordt gedeployed naar de database en wordt bijgewerkt.
Nadat het deployen van het project gereed is, starten we het proces op door te kiezen voor Run.
SSAS gaat nu alle gegevens inlezen en het algoritme loslaten op alle orders en de onderliggende regels om de associaties tussen de verschillende items te vinden.
Afhankelijk van het aantal regels kan dit even duren. In onze voorbeeld database zitten circa 129.000 regels, waardoor het verwerken een aantal minuten duurt.
Onderzoeken mining structure
Via het tabblad Mining model viewer verkrijgen we een beeld van de resultaten van het algoritme. In dit tabblad kiezen we voor het onderdeel Dependency network.
In het dependency network zie je de associaties tussen de verschillende artikelen visueel weergegeven. Door een willekeurig item te selecteren, zie je de relaties met andere artikelen die door het algoritme gevonden zijn.
In het dependency network van ons voorbeeld is heel opvallend dat er blijkbaar vijf artikelen zijn die wel samen gekocht worden, maar geen enkele relatie hebben met andere artikelen uit het assortiment (linksonderin).
Voorspellen
De laatste (maar zeker de allerleukste) stap is om het algoritme een voorspelling te laten doen op basis van de input van een willekeurig artikel. Hiervoor gaan we naar het tabblad Mining model prediction.
Bovenin dit scherm kiezen we voor de optie Singleton Query en slepen we de tabel Orderregels in de Mining model column in de invoer box van de Singleton Query.
In het veld value kunnen we vervolgens een Artikel selecteren op basis waarvan het algoritme een voorspelling mag gaan doen. Via de Nested Table Input hebben we een overzicht van alle artikelen in de demo dataset.
De query om de voorspelling te doen voeren we in in het scherm aan de onderkant. We voeren de volgende gegevens in:
- Source = Prediction function
- Field = PredictionAssociation
- Criteria/ Argument = [Association].[Order Regels], INCLUDE_STATISTICS
Klik bovenin op het vierkantje icoontje om over te schakelen naar de query resultaten.
In dit overzicht zien we een overzicht van de artikelen die geassocieerd worden met het geselecteerde artikel. Doordat we in de vorige stap ook de statistieken hebben opgevraagd (via INCLUDE_STATISTICS), zien we hier ook de gegevens van de berekende support en probability. Hier krijgen we een goed idee van de betrouwbaarheid van de voorspelling.
Afsluiting
SSAS is een geweldige tool om de associaties te onderzoeken tussen verschillende items in een dataset. Dit levert (soms zelfs verrassende) inzichten op over de data die alleen op basis van het gevoel niet altijd aan het licht zouden zijn gekomen.
SSAS analyses kunnen ‘handmatig’ worden gestart, maar kunnen in combinatie met SQL Service Integration Services (SSIS) ook automatisch worden uitgevoerd, zodat er altijd actueel inzicht beschikbaar is. De mogelijkheden zijn eindeloos..