Zephyrnet-logo

Voorspelling van klantverloop met MLIB

Datum:

Functieselectie

Zoals we allemaal weten functie selectie is een van de belangrijkste stappen in de voorverwerking van gegevens, waarbij we alle functies selecteren die op basis van onze kennis het beste passen bij de model ontwikkelingsfase:. Daarom worden hier alle geldige numerieke kolommen in aanmerking genomen.

van pyspark.ml.feature import VectorAssembler assembler = VectorAssembler(inputCols=['Age', 'Total_Purchase', 'Account_Manager', 'Years', 'Num_Sites'],outputCol='features')

Gevolgtrekking: Tijdens het werken met MLIB moeten we weten dat de formaat van gegevens die MLIB als bibliotheek accepteert, daarom gebruiken we de VectorAssembler module die clubs alle geselecteerde functies samen in één kolom en die wordt behandeld als de feature-kolom (optelling van alle features), hetzelfde kunnen we zien in de parametersectie van de assembler-object.

output = assembler.transform(gegevens)

Gevolgtrekking: Het transformeren van de gegevens is zeer noodzakelijk omdat het werkt als de plegen verklaring dwz alle transacties (wijzigingen) die worden verwerkt, moeten worden gezien in de echte dataset als we het zien, daarom gebruikten we de transformatie methode ervoor.

final_data = output.select('features','churn').show()

Output:

Gevolgtrekking: Dus terwijl we naar de bovenstaande output kijken, zullen dingen duidelijk worden dat wat we wilden doen als de eerste kolom is functionaliteiten die alles hebben geselecteerde kolommen en dan de labelkolom dwz karnen.

Test trein splitsen

Als je me vanaf het begin van het artikel volgt, heb je misschien een vraag als we de afzonderlijke testgegevens al hebben, waarom splitsen we deze dataset dan? Rechtsaf?

Dus het antwoord is om deze fase van te houden splitsen als de validatie van het model en we hoeven deze routine niet opnieuw uit te voeren wanneer we te maken zouden hebben met nieuwe gegevens zoals ze zijn al gesplitst in verschillende CSV-bestanden.

train_churn,test_churn = final_data.randomSplit([0.7,0.3])

Gevolgtrekking: Met behulp van tuple unpacking hebben we de 70% van de gegevens in trein_verloop en 30% ervan in test_verloop door PySpark's te gebruiken willekeurige splitsing() methode.

Model ontwikkeling

We bereiken deze fase van het artikel is het bewijs dat we al hebben onze gegevens opgeschoond volledig en dat het klaar is om te worden ingevoerd in het classificatie-algoritmemodel (meer specifiek de Logistische regressie)

Houd er rekening mee dat we deze modelbouw opnieuw moeten doen als we te maken hebben met gegevens van nieuwe klanten.

van pyspark.ml.classification import LogisticRegression lr_churn = LogisticRegression(labelCol='churn') gemonteerd_churn_model = lr_churn.fit(train_churn) training_sum = gemonteerd_churn_model.summary

Code-uitsplitsing: Dit zou een volledige uitleg zijn van de stappen die nodig zijn in de modelbouwfase met behulp van MLIB

  1. Importeren van de Logistische regressie module van de ml. classificatie bibliotheek van het Pyspark.
  2. Een Logistic Regression-object maken en de . doorgeven labelkolom (churn).
  3. Het model passen dwz het starten van de training van het model op de trainingsdataset.
  4. De samenvatting van de training met behulp van het samenvattingsobject dat werd bereikt via het getrainde model
training_sum.voorspellingen.describe().show()

Output:

Model ontwikkeling

Gevolgtrekking: Dus het samenvattingsobject van de MLIB-bibliotheek leverde veel inzichten op over de getraind logistisch regressiemodel en met de beschikbare statistische informatie kunnen we concluderen dat het model goed heeft gepresteerd als de gemiddelde, standaarddeviatie van de karnen (werkelijke waarden) en voorspelling (voorspelde waarden) is zeer dichtbij.

Modelevaluatie

In deze fase van de voorspelling van het klantverloop moeten we: analyseer ons model waarop is getraind 70% van de dataset en door deze te evalueren kunnen we beslissen of we ga met het model of als er wat krampen nodig zijn.

van pyspark.ml.evaluation import BinaryClassificationEvaluator pred_and_labels =fit_churn_model.evaluate(test_churn)

Gevolgtrekking: Je kunt zien dat we in de eerste stap de hebben geïmporteerd Binaire ClassificatieEvaluator wat ook heel logisch is omdat we te maken hebben met de labelkolom die alleen binaire waarden heeft.

Dan schatten() methode ontstaat waar de . nodig is gegevens testen (30% van de totale dataset) als de parameter en retourneert de meerdere velden waaruit we het model (handmatig) kunnen evalueren.

pred_and_labels.voorspellingen.show()

Output:

Modelevaluatie

Gevolgtrekking: In de bovenstaande uitvoer kan men 4 kolommen zien die zijn geretourneerd door de evaluatiemethode die ze zijn:

  1. Kenmerken: Alle functiewaarden werden samengeknuppeld door VectorAssembler tijdens de functie selectie fase.
  2. Klantverloop: De werkelijke waarden, dwz de werkelijke label kolom
  3. Waarschijnlijkheid: Deze kolom heeft de waarschijnlijkheid van de voorspellingen die door het model zijn gemaakt.
  4. voorspellingen: De voorspelde waarden (hier 0 of 1) door het model op de testgegevens.

De nieuwe gegevens voorspellen

Eindelijk komt de laatste fase van het artikel waar we tot nu toe al hebben ons model gebouwd en geëvalueerd en nu worden hier de voorspellingen gedaan op de volledig nieuwe gegevens dwz de dataset van de nieuwe klant en kijk hoe goed het model presteerde.

Merk op dat in deze fase de stappen hetzelfde zullen zijn, maar de dataset zal verschillen naargelang de situatie.

final_lr_model = lr_churn.fit(final_data)

Gevolgtrekking: Ja! Ja! niets extra's om hier te bespreken, omdat we deze stap al hebben doorlopen, maar het belangrijkste om op te merken is dat we zijn het uitvoeren van de training op de volledige dataset (final_data) zoals we weten hebben we de testgegevens al in het CSV-bestand, vandaar geen splitsing van de dataset nodig.

new_customers = spark.read.csv('new_customers.csv',inferSchema=True, header=True) new_customers.printSchema()

Output:

Voorspelling van klantverloop

Gevolgtrekking: Omdat de testgegevens zich in een ander bestand bevinden, wordt het noodzakelijk om: dit artikel lezen het op dezelfde manier als we het eerder deden in het geval van het klantverloop gegevensset.

Toen zagen we het schema van deze nieuwe dataset en concluderen dat het de precies hetzelfde schema.

test_new_customers = assembler.transform(nieuwe_klanten)

Gevolgtrekking: Assembler-object was al gemaakt terwijl de belangrijkste functies waren geselecteerd, dus nu hetzelfde assembler-object wordt gebruikt om deze nieuwe testgegevens te transformeren.

final_results = final_lr_model.transform(test_new_customers)

Gevolgtrekking: Zoals we de transformatie van de functies hebben gedaan met behulp van het assembler-object, moeten we ook de transformatie van het uiteindelijke model bovenop nieuwe klanten.

final_results.select('Bedrijf','voorspelling').show()

Output:

Voorspelling van klantverloop

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

spot_img

Laatste intelligentie

spot_img