Werken met R

We gaan bij het maken van de opdracht de data-analyse software R gebruiken.
De eerste practicumsessie (vrijdag 2 juni) is dan ook een kennismaking met R.
Hierbij zullen we gebruik maken van het pakket swirl. Om R op je eigen computer/laptop te installeren kun je R hier downloaden. R Studio is een IDE voor R, en is van harte aanbevolen.
Voor RStudio, kijk hier. Voor het installeren en starten van swirl, kijk hier (Stap 3 en 4).
Start swirl, en kies de cursus "R Programming". De lessen 2: Workspace and Files en 14: Dates and Times kun je overslaan.

Om R te starten op een computer in de practicumzaal ga je naar

Start -> All Programs -> Standard Applications -> Science -> Biology ->
R for Windows 3.3.1 en dan R for Windows of Rstudio

Bij het installeren en laden van het pakket swirl (en andere pakketten die je wil installeren) in de practicumomgeving, geef svp bij het installeren en laden een directory op waar je schrijfrechten hebt, anders gaat het mis. Typ bijvoorbeeld in R:

 > install.packages(pkgs="swirl",lib="U:/R/libraries")
 > library("swirl",lib.loc="U:/R/libraries")

Opdracht 2

Algemene informatie

Deze opdracht is gebaseerd op een inmiddels afgeronde Kaggle competitie.
De opdracht dient gemaakt te worden door teams van 2 studenten.
Het verslag dient uiterlijk vrijdag 23 juni in pdf-formaat per e-mail te worden ingeleverd bij Ad Feelders.

Inleiding

Home Depot is een Amerikaanse keten van bouwmarkten. In 2011 telde Home Depot 2248 vestigingen in de Verenigde Staten, Canada, Mexico en China. In totaal zijn er zo'n 321,000 mensen werkzaam bij het bedrijf. Het domein homedepot.com trok vanaf 2008 minstens 120 millioen bezoekers per jaar volgens een Compete.com onderzoek. In deze opdracht proberen we de "shopping experience" van bezoekers van de Home Depot website te verbeteren door een model te ontwikkelen dat de relevantie van zoekresultaten nauwkeurig kan voorspellen. Home Depot gebruikt zoekrelevantie als een impliciete maat om vast te stellen hoe snel klanten bij de juiste produkten terechtkomen. Op dit moment wordt de impact van potentiële veranderingen van de zoekalgoritmen door mensen geëvalueerd; dit is een langdurig en subjectief proces. Door het reduceren van menselijke inbreng in de evaluatie van zoekrelevantie hoopt Home Depot dat ze de zoekalgoritmen sneller kunnen verbeteren.

De Data

De data set bevat gegevens over een aantal producten en echte queries van bezoekers van de website van Home Depot. De opdracht is om de relevantie-score te voorspellen voor de gegeven combinaties van producten en zoektermen. De "ground truth" ratings zijn verkregen door de zoekterm/product paren door meerdere mensen te laten scoren. Relevantie is een getal tussen 1 (niet relevant) en 3 (zeer relevant). Bijvoorbeeld, de query "AA battery" is zeer relevant voor een pakje AA batterijen (relevantie = 3), matig relevant voor een batterij voor een draadloze boor (relevantie = 2), en niet relevant voor een sneeuwschep (relevantie = 1). Ieder paar is door tenminste 3 personen gescoord. De verstrekte relevantie-scores zijn het gemiddelde van die individuele scores. (Merk op dat strikt genomen het middelen van ordinale scores dubieus is, maar deze voorbewerking van de data kunnen we niet meer ongedaan maken).

Je hebt de beschikking over de volgende twee tabellen:

  • query_product.csv
    Deze tabel bevat de volgende velden:
    1. id: unieke identifier van query-product paar
    2. product_uid: unieke identifier van het product waarvan de relevantie voor de query wordt gegeven
    3. product_title: de naam van het product (tekst)
    4. search_term: de query (tekst)
    5. relevance: (numeriek) relevantie van product voor query; de score is het gemiddelde van tenminste 3 beoordelaars. Iedere beoordelaar geeft een score van 1 (niet relevant), 2 (relevant) of 3 (zeer relevant).
  • product_descriptions.csv
    Deze tabel bevat de volgende velden:
    1. product_uid: unieke identifier van het product
    2. product_description: beschrijving van het product (tekst)

De tabel product_descriptions.csv bevat meer producten (ongeveer 124,000) dan er in de query-product paren voorkomen. De tabellen kunnen vanzelfsprekend gejoined (merge in R) worden op product_uid.

Analyse

Begin na het inlezen van de data met het berekenen van een aantal beschrijvende statistieken. Een aantal voorbeelden: Hoeveel unieke queries zijn er? Hoeveel unieke producten komen er voor in de query_product tabel? Wat is de verdeling van de relevantie-scores?

Bedenk features die bepalend zouden kunnen zijn voor de relevantie van een product voor een query. Aangezien het model ook moet werken voor productbeschrijvingen en zoektermen die niet in de trainingset voorkomen, is het belangrijk de features zo te kiezen dat we hier geen last van hebben. We geven een voorbeeld-feature:

  • komen alle zoektermen voor in de productnaam? (ja/nee)

Voeg zelf extra features toe, je model moet tenminste 10 features hebben. Gebruik de kennis die je in deel 1 van de cursus hebt opgedaan om goede features te bedenken. Het zou kunnen helpen om, voordat je de features uitrekent, de tekstdata eerst voor te bewerken. Denk aan de gebruikelijke operaties als het verwijderen van stopwoorden, leestekens, getallen. Je kunt ook stemming toepassen.

We gaan de data met zowel regressie- als classificatiemodellen analyseren.

(A) Regressie

Deel de data willekeurig op in een training set (50,000 query-product paren) en een test set (de overige 24,067 paren).
  • Schat een lineair regressiemodel met alle features op de training set en gebruik dat model om de ratings te voorspellen op de test set. Bereken de root mean square error van die voorspellingen.
  • Bepaal welke features een significante coëfficiënt hebben bij significantieniveau alfa=0.05.
  • Bespreek de tekens van de geschatte coëfficiënten. Zijn alle tekens in overeenstemming met het "gezonde verstand"?
  • Voer een local search uit met stepAIC (in MASS library), waarbij ook interacties tussen 2 features mogen worden toegevoegd. Bespreek het regressiemodel dat dit oplevert, bereken de root mean square error op de testset, en vergelijk dit met die van het oorspronkelijke model.

Merk op dat het gebruik van lineaire regressie niet helemaal in overeenstemming is met het ordinale karakter van de data. Ook op het gebruik van (root) mean square error als evaluatiemaat kan men het nodige aanmerken. Ondanks deze theoretische bezwaren zou het een prima bruikbaar model kunnen opleveren.

(B) Classificatie

Analyseer de data met ordinale logistische regressie (proportional odds logistic regression; polr in MASS library) en met multinomiale (= ongeordende) logistische regressie (multinom in nnet library). Selecteer hiertoe alleen de rijen met een relevantiescore van 1, 2 of 3. Je kunt dezelfde features gebruiken als in het lineaire regressie model. Deel de data op in een train- (67%) en testset (33%). Schat de modellen op de trainset, en gebruik die modellen om de klasse-labels op de testset te voorspellen. Rapporteer de confusion matrix en het percentage correct voorspeld.

Maak ook een kruistabel die de voorspellingen van polr en multinom op de testset tegen elkaar uitzet. Maak tenslotte voor beide modellen een vector die aangeeft of een rij uit de testset correct is voorspeld (1) of incorrect is voorspeld (0). Zet ook deze twee vectoren tegen elkaar uit in een kruistabel. Voer op basis van deze kruistabel een toets uit om te bepalen of het verschil in "accuracy" tussen polr en multinom significant is.

Gereedschap

Het staat je vrij de tools te gebruiken die je wilt, maar we kunnen alleen ondersteuning bieden en aanbevelingen doen bij het gebruik van R.

Overzicht van nuttige R-packages voor deze opdracht:

  • tau: eenvoudige tekstmanipulatie, bijvoorbeeld de functie "textcnt" voor het tellen van woorden in tekst.
  • tm: text mining, bevat functies voor het aanleggen van een tekstcorpus en het uitvoeren van bewerkingen op dat corpus. Bevat ook een functie voor het maken van een document-term matrix uit een tekstcorpus, met verschillende wegingsfactoren voor de termen (bijvoorbeeld tf.idf).
  • MASS: bevat de functie "polr" voor proportional odds logistic regression (=ordinale logistische regressie); bevat tevens de functie stepAIC voor local search op basis van AIC of BIC score.
  • nnet: bevat de functie "multinom" voor multinomiale (=ongeordende) logistische regressie.

Het Verslag

Het verslag dient uiterlijk vrijdag 23 juni in pdf-formaat per e-mail te worden ingeleverd bij Ad Feelders. Ter indicatie: het verslag dient een omvang van ongeveer 15 tot 20 pagina's te hebben.

Het verslag dient de volgende elementen te bevatten:

  1. Een inleiding waarin de probleemstelling wordt uiteengezet. Wat is de analysevraag, en wat is de beoogde toepassing van de modellen? Hierbij mag je natuurlijk delen van de opdrachtbeschrijving hergebruiken, maar probeer zoveel mogelijk zelf te formuleren.
  2. Een beschrijving van de beschikbare data, inclusief eenvoudige beschrijvende statistieken. Meld ook zaken die je opvallen bij het inspecteren van de data, bijvoorbeeld zaken die op vervuiling kunnen wijzen.
  3. Beschrijf eventuele voorbewerkingen die je op de tekst hebt uitgevoerd, bijvoorbeeld het verwijderen van leestekens en stopwoorden, stemming, etc.
  4. Beschrijf nauwkeurig welke features je hebt bedacht, en waarom je denkt dat die features voorspellende waarde zouden kunnen hebben.
  5. Rapporteer over de regressie- en classificatiemodellen, die je hebt getraind op de data.
    Zie de omschrijving onder de kopjes "(A) Regressie" en "(B) Classificatie" hierboven.
  6. Sluit je rapport af met een conclusie. Besteed daarbij aandacht aan de volgende vragen:
    • Wat is je oordeel over de kwaliteit van de data?
    • Hoe goed kunnen de geleerde modellen de relevantie voorspellen?
    • Welke features (of combinaties van features) bleken het belangrijkst?
    • Vergelijk de ordinale- en multinomiale logistsiche regressiemodellen. Welk model heeft de voorkeur?
    • Wat zou je nog kunnen proberen om de modellen te verbeteren?

Om je op weg te helpen, kun je hier een aantal nuttige voorbeelden vinden.