Sådan vinder du en Kaggle-konkurrence i Data Science (via Coursera): del 1/5

Kilde: Coursera

Dette er mine notater fra det 5-ugers kursus om Coursera, som undervises af et team af dataforskere og Kaggle GrandMasters.

## uge 1 ##

af Alexander Guschin, GM # 5, Yandex, lektor ved MIPT
Mikhail Trofimo, ph.d.-studerende ved CCAS

Læringsmål

  • Beskriv konkurrencemekanik
  • Sammenlign applikationer og konkurrencer i det virkelige liv
  • Resume grunde til at deltage i datavidenskonkurrencer
  • Beskriv hovedtyper af ML-algoritmer
  • Beskriv typiske hardware- og softwarekrav
  • Analyser afgørelsesgrænser for forskellige klassifikatorer
  • Brug standard ML-biblioteker

1. Introduktion og kursusoversigt

Blandt alle emner inden for datavidenskab er konkurrencedygtig dataanalyse især interessant.
For en erfaren specialist er dette et fantastisk område at prøve sine evner mod andre mennesker og lære nogle nye tricks; og for en nybegynder en god start på hurtigt og legende at lære det grundlæggende i praktisk datavidenskab. For begge er det at deltage i en konkurrence en god chance for at udvide viden og blive bekendt med nye mennesker.

  • Uge nr. 1:
    . Beskriv konkurrencemekanik
    . Sammenlign applikationer og konkurrencer i det virkelige liv
    . Resume grunde til at deltage i datavidenskonkurrencer
    . Beskriv hovedtyper af ML-algoritmer
    . Beskriv typiske hardware- og softwarekrav
    . Analyser afgørelsesgrænser for forskellige klassifikatorer
    . Funktion med forarbejdning og generering med hensyn til modeller
    . Funktionsudtræk fra tekst og billeder
  • Uge nr. 2:
    . Exploratory Data Analysis (EDA)
    . EDA-eksempler og visualiseringer
    . Inspicere dataene og find gyldne funktioner
    . Validering: risiko for overfitting, strategier og problemer
    . Datalækager
  • Uge # 3:
    . Metrics optimering i en konkurrence, nye målinger
    . Advanced Feature Engineering I: middelkodning, regularisering, generaliseringer
  • Uge # 4:
    . Optimering af hyperparameter
    . Tips og tricks
    . Advanced Feature Engineering II: matrixfaktorisering til funktionsekstraktion, tSNE, funktionsinteraktioner
    . Ensembling
  • Uge # 5:
    . Konkurrenceeksempler
    . Afsluttende projekt

2. Konkurrencemekanik

2.1. Der er en lang række konkurrencer: NLP, Time-Series, Computer Vision.

Men de har alle den samme struktur:
. Data leveres med beskrivelse
. Der gives en evalueringsfunktion
. Du bygger en model og bruger indsendelsesfilen
. Din indsendelse scores i et Leaderboard med offentlige og private testsæt
Det offentlige sæt bruges under konkurrencen, det private til den endelige placering
. Du kan indsende mellem 2 og 5 filer pr. Dag.

Hvorfor deltage i en konkurrence?
. Fantastisk mulighed for læring og netværk
. Interessante ikke-trivielle opgaver og avancerede tilgange
. En måde at få anerkendelse inden for Data Science-samfundet og mulige jobtilbud

2.2. Kaggle oversigt

Gennemgang af en Kaggle-konkurrence (Zillow-hjemmeevaluering):
. Oversigt med beskrivelse, evaluering, priser og tidslinje
. Data leveret af arrangøren med beskrivelse
. Offentlige kerner oprettet af deltagere kan bruges som udgangspunkt, især EDA.
. Diskussion: arrangøren kan give yderligere information og besvare spørgsmål
. Leaderboard: viser den bedste score for hver deltager og antal indsendelser. Beregnes på offentligt sæt under konkurrence.
. Regler
. Team: du kan oprette et team med andre deltagere, kontrollere reglerne og pas på det maksimale antal tilladte indsendelser (unikke deltagere vs team)

2.3. Real-World Applications vs Competitions

  • Virkelige verdens ML-rørledninger er en kompliceret proces, herunder:
    . Forståelse af forretningsproblemet
    . Formaliser problemet (hvad er en spam?)
    . Saml dataene
    . Rengør og forarbejd data
    . Vælg en model
    . Definer en evaluering af modellen i det virkelige liv
    . Inferenshastighed
    . Distribuer modellen til brugere
  • Konkurrencer fokuserer kun på:
    . Rengør og forarbejd data
    . Vælg en model

ML-konkurrencer er en fantastisk måde at lære, men de behandler ikke spørgsmålene om formalisering, implementering og test.

Undgå at begrænse dig selv: det er OK at bruge Heuristics og manuel dataanalyse.
Vær ikke bange for komplekse løsninger, avanceret funktionsteknik, enorme beregninger, ensembling.
Det ultimative mål er at opnå den højeste score i den metriske værdi.

3. Resumé af de vigtigste ML-algoritmer

3.1. Vigtigste ML-algoritmer

  • Lineære modeller: prøv at adskille datapunkter med et plan i 2 underrum
    ex: Logistisk regression, Support Vector Machines (SVM)
    Fås i Scikit-Learn eller Vowpal Wabbit
  • Træbaseret: brug beslutningstræer (DT) som tilfældige skov og gradient Boosted Decision Trees (GBDT)
    Anvender en “Divide and Conquer” -tilgang ved at opdele dataene i underrum eller bokse baseret på sandsynligheden for resultatet
    Generelt er DT-modeller meget kraftfulde til tabeldata; men temmelig svag til at fange lineære afhængigheder, da det kræver en masse opdeling.
    Fås i Sickit-Learn, XGBoost, LightGBM
  • kNN: K-Nærmeste naboer, ser efter nærmeste datapunkter. Lukte objekter har sandsynligvis de samme etiketter.
  • Neurale netværk: ofte betragtet som en "black-box", kan være meget effektiv til billeder, lyde, tekst og sekvenser.
    Fås i TensorFlow, PyTorch, Keras

Ingen gratis frokost-sætning: der er ikke en enkelt metode, der overgår alle de andre til alle opgaver.

3.2. Ansvarsfraskrivelse

Hvis du ikke ved meget om grundlæggende ML-algoritmer, skal du kontrollere disse links, inden du tager quizzen.

  • Random Forest: http://www.datasciencecentral.com/profiles/blogs/random-forests-explained-intuitively
  • Gradient Boosting: http://arogozhnikov.github.io/2016/06/24/gradient_boosting_explained.html
  • KNN:
    https://www.analyticsvidhya.com/blog/2014/10/introduction-k-neighbours-algorithm-clustering/

3.3. Yderligere materialer og links

Dækker Scikit-Learn-bibliotek med kNN, Lineære modeller, beslutningstræer.
Plus H2O-dokumentation om algoritmer og parametre.
. Vowpal Wabbit
. XGBoost
. LightGBM
. Neurale net med Keras, PyTorch, TensorFlow, MXNet & Lasagne
https://www.coursera.org/learn/competitive-data-science/supplement/AgAOD/additional-materials-and-links

4. Krav til software og hardware

4.1. Hardware
Få en pc med en nylig Nvidia GPU, en CPU med 6-kerner og 32 gb RAM.
En hurtig lagring (harddisk) er kritisk, især for Computer Vision, så en SSD er et must, en NVMe endnu bedre.
Brug ellers skytjenester som AWS, men pas på driftsomkostningerne kontra en dedikeret pc.

4.2. Software
Linux (Ubuntu med Anaconda) er bedst, nogle nøglebiblioteker er ikke tilgængelige på Windows.
. Python er dagens favorit, da den understøtter en massiv pool af biblioteker til ML.
. Numpy for lineær algebra, Pandaer for dataframe (som SQL), Scikit-Learn til klassiske ML-algoritmer.
. Matplotlib til plotning.
. Jupyter Notebook som IDE (Integreret udviklingsmiljø).
. XGBoost og LightGBM til gradientforstærkede beslutningstræer.
. TensorFlow / Keras og PyTorch til neurale netværk.

4.3. Links til installation og dokumenter
https://www.coursera.org/learn/competitive-data-science/supplement/Djqi7/additional-material-and-links

5. Funktion forforarbejdning og generering med hensyn til modeller

5.1. Oversigt med Titanic på Kaggle

  • Funktioner: numerisk, kategorisk (rød, grøn, blå), ordinal (gammel https://stats.idre.ucla.edu/other/mult-pkg/whatstat/what-is-the-difference-between-categorical-ordinal-and-interval-variables/
  • Eksempel på forbehandlingsfunktion: en-hot-kodning (som "pclass" i Titanic)
    Nogle gange kræver beslutningstræler (DT) det ikke, men lineære modeller gør det, hvis funktionen ikke har en klar lineær afhængighed (som overlevelsesrate vs pclass).
    RF (Random Forests) kan let overvinde denne udfordring.
  • Funktionsgenerering: i tilfælde af salgsprognoser pr. Dag (dvs. stærkt lineært potentiale) kan det hjælpe med at tilføje Week_nummer eller Day_of_week.
    Disse kan hjælpe både lineære og DT-modeller.

Funktion forforarbejdning er ofte nødvendigt.
Funktionsgenerering er en kraftfuld teknik.
Men de er begge afhængige af modelltypen (DT vs Linear vs NN)

5.2. Numeriske funktioner

5.2.1. Funktion forforarbejdning: Decision-Trees (DT) vs ikke-DT modeller

  • Skalering: DT forsøger at finde den bedste opdeling for en funktion, uanset skalaen.
    kNN, Lineær eller NN er meget følsomme over for skaleringsforskelle.
  • MinMaxScale
    Skala til [0, 1]: sklearn.preprocessing.MinMaxScaler
    X = (X - X.min) / (X.max - X.min)
  • StandardScale
    Skala til middel = 0, std = 1: sklearn.forarbejdning.StandardScaler
    X = (X - X.mean) / X.std

Generelt for en ikke-DT-model: anvender vi en valgt transformation til ALLE numeriske funktioner.

  • Outliers: vi kan klippe for 1. og 99. percentiler, også kendt som “winsorization” i økonomiske data.
  • Rang: kan bedre valgmulighed end MinMaxScaler i tilfælde af, at Outliers er til stede (og ikke pakket), godt for ikke-DT.
    scipy.stats.rankdata
    Imp: skal anvendes på både Tog og Test sammen.
  • Logtransformation som np.log (1 + x), eller hæv til magten <1 som np.sqrt (x + 2/3):
    De bringer for store værdier tættere på hinanden. Især godt for NN.
  • Avancerede teknikker til ikke-DT: sammenkæde datarammer, der er produceret af forskellige forbehandlinger, eller sammensætning af modeller fra forskellige forbehandlinger.

5.2.2. Funktionsgenerering: baseret på EDA og forretningsviden.

  • Let: med Sqm- og prisfunktioner kan vi generere en ny funktion “Pris / kvm”
    Eller generere brøkdel af en værdi, ligesom 1,99 € -> 0,99; 2,49 € -> 0,49
  • Avanceret en: genererer tidsinterval af en bruger, der indtaster en meddelelse (til spambot-detektion)

Konklusion: DT er ikke afhængig af skalering, men ikke-DT afhænger enormt af det.
Mest anvendte forarbejdninger: MinMaxScaler, StandardScaler, Rang, np.log (1 + x) og np.sqrt (1 + x)
Generation er drevet af EDA og forretningskendskab.

5.3. Kategoriske og ordinære træk

5.3.1. Forforarbejdning af funktion:

Der er tre kategoriske funktioner i Titanic-datasættet: Sex, Cabin, Embarked (Port's name)
Påmindelse om eksempler på ordinær klassificering:
Pclass (1,2,3) som bestilt kategorisk funktion eller
Førerkorttype (A, B, C, D) eller
Uddannelsesniveau (børnehave, skole, college, bachelor, master, doktorgrad)

A. En teknik er Label Encoding (erstatter kategorier med tal)
God til DT, ikke for ikke-DT.

For ombordstigning (S for Southampton, C for Cherbourg, Q for Queenstown)
- Alfabetisk (sorteret): [S, C, Q] -> [2,1,3] med sklearn.forarbejdning.LabelEncoder
- Orden på udseende: [S, C, Q] -> [1,2,3] med Pandas.factorize

- Frekvenskodning: [S, C, Q] -> [0,5, 0,3, 0,2], bedre for ikke-DT, da det bevarer oplysninger om værdifordeling, men alligevel stor for DT.

B. En anden teknik er One-hot Encoding (0,0,1) eller (0,1,0) for hver række
pandas.get_dummies, sklearn.preprocessing.OneHotEncoder
Fantastisk til ikke-DT, plus det er skaleret (min = 0, max = 1).

Advarsel: Hvis der er for mange unikke værdier i kategorien, genererer one-hot for mange kolonner med masser af nulværdier.
For at gemme RAM skal du måske bruge sparsomme matrixer og gemme kun ikke-nul elementer (tip: hvis ikke-nul værdier langt mindre end 50% i alt)

5.3.2. Funktionsgenerering til kategorisk funktion:
(mere i næste lektioner)

5.4. Datetime- og koordinatsfunktioner

A. Dato og tid:

  • 'Periodicitet' (dagnummer i uge, måned, år, sæson) bruges til at fange gentagne mønstre.
  • "Tid siden" stof blev taget eller sidste helligdag eller antal dage tilbage før osv.
    Kan være rækkeuafhængigt øjeblik (f.eks .: siden 00:00:00 UTC, 1. januar 1970) eller rækkeafhængigt (siden sidst taget stof, sidste helligdag, antal dage tilbage osv.)
  • 'Forskel mellem datoer' for Churn-forudsigelse, ligesom "Last_purchase_date - Last_call_date = Date_diff"

B. Koordinater:

  • Afstand til nærmeste POI (metro, skole, hospital, politi osv.)
  • Du kan også bruge klynger baseret på nye funktioner og bruge "Afstand til klyngens midterkoorder".
  • Eller opret samlede statistikker, såsom "Antal lejligheder i område" eller "Gennemsnitlig fast ejendom pris i område"
  • Avanceret tip: se efter Rotate on coords

5.5. Håndtering af manglende værdier

  • Typer af manglende værdier: NaN, tom streng, '-1' (erstatter manglende værdier i [0,1]), meget stort antal, '-99999', '999' osv.
  • Fillna nærmer sig:
    -999, -1 eller
    Middel og median eller
    Binær funktion "isnull" kan være en fordel eller
    Rekonstruer den manglende værdi om muligt (bedste tilgang)
  • Udfyld ikke NaN'er før funktionsgenerering: dette kan forurene dataene (eks: “Tid siden” eller frekvens / etiketkodning) og skrue modellen.
  • XGboost kan håndtere “NaN” for at prøve.
  • Behandling af testværdier, der ikke findes i togdata: Frekvenskodning i Tog kan hjælpe, da det også vil se efter Frekvens i test.

6. Funktion ekstraktion fra tekst og billeder

6.1. Taske med ord (BOW)

Kilde: Coursera

For Titanic kan vi udtrække information / mønstre fra passagerernes navne, såsom deres familiemedlemmer / søskende eller deres titler (Lord, Princess)

Sådan gør du: sklearn.feature_extraction.text.CountVectorizer
Opretter 1 kolonne pr. Unikt ord og tæller dens forekomst pr. Række (sætning).

A. Forbehandling af tekst

  • Små bogstaver: Meget-> meget
  • Lemmatisering: demokrati, demokratisk, demokratisering -> demokrati (kræver god ordbog, korpus)
  • Stemming: demokrati, demokratisk, demokratisering -> demokrat
  • Stopwords: slippe af med artikler, prepositioner og meget almindelige ord, bruger NLTK (Natural Language ToolKit)
    'Sklearn.feature_extraction.text.CountVectorizer' med max_df

B. N-gram til sekvenser af ord eller tegn, kan hjælpe med at bruge lokal kontekst
'Sklearn.feature_extraction.text.CountVectorizer' med Ngram_range og analysator

C. TFiDF til postforarbejdning (krævet for at skalere funktioner for ikke-DT)

  • TF: Termfrekvens (i% pr. Række, sum = 1) efterfulgt af
  • iDF: Inverse Document Frequency (for at øge sjældne ord kontra hyppige ord)
    ’Sklearn.feature_extraction.text.TfidfVectorizer’

6.2. Brug af Word-vektorer og ConvNets

A. Ordvektorer

  • Word2vec konverterer hvert ord til en eller anden vektor i et rum med hundreder af dimensioner, skaber indlejringer mellem ord, der ofte bruges sammen i samme kontekst.
    Konge med mand, dronning med kvinde.
    King-Queen = Mand-Woman (i vektorstørrelse)
  • Andre ordvektorer: Handske, FastText
  • Setninger: Doc2vec

Der er foruddannede modeller, som på Wikipedia.
Bemærk: forarbejdning kan anvendes FØR du bruger Word2vec

B. Sammenligning af BOW vs w2v (Word2vec)

  • BOW: meget store vektorer, betydningen af ​​hver værdi i vektoren er kendt
  • w2v: mindre vektorer, værdier i vektor, der sjældent tolkes, ord med lignende betydning har ofte lignende indlejringer

C. Hurtig introduktion til udtrækning af funktioner fra Billeder med CNN'er
(dækket af detaljer i senere lektioner)

  • Finetuning eller transfer-learning
  • Forøgelse af data

Næste uge: Exploratory Data Analysis (EDA) og datalækager