Abstrakt

https://www.kaggle.com/datasets/lava18/google-play-store-apps?resource=download — lidhje me grupin e të dhënave Kaggle

Të dhënat e të dhënave që po përdor është marrë nga Kaggle. Ka rreth 267,000 vëzhgime (numri i aplikacioneve) dhe 13 variabla (numri i karakteristikave për çdo aplikacion). Ky informacion është hequr nga Google Play Store. Variabli ynë i synuar është "Instals" (numri i instalimeve), të cilin ne e konsiderojmë si një përfaqësues për popullaritetin e një aplikacioni. 12 variablat e mbetur mbulojnë në thelb të gjithë informacionin e rëndësishëm që përdoruesit do t'i kushtojnë vëmendje në çdo aplikacion në dyqanin e aplikacioneve Google, duke përfshirë kategorinë, çmimin, vlerësimet, rishikimet, versionin, etj. Kështu që ne mund të parashikojmë numrin e instalimeve të një aplikacioni të bazuar mbi ta.

QËLLIMI

Për të pastruar të dhënat dhe për të kryer disa teknika të përpunimit paraprak për të kontrolluar Modelin më të mirë AutoMl dhe Interpretimin e Modelit duke përdorur Komplote të ndryshme.

Set i të dhënave

Seti i të dhënave përbëhet nga:

  • Kolona e instalimeve - është një ndryshore e synuar (ndryshore e varur)
  • Kolona Rest 12 vepron si variabël i pavarur.

Importimi i bibliotekave

##Installing all the required libraries for the Assignment
!pip install requests
!pip install tabulate
!pip install "colorama>=0.3.8"
!pip install future
!pip install h2o
!pip install fitter

import csv
import json
import logging
import optparse
import os
import random
import sys
import time
from datetime import datetime
from distutils.util import strtobool

# Importing all the libararies required for the assignment
import h2o
import matplotlib.pylab as plt
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import psutil
import seaborn as sns
from fitter import Fitter, get_common_distributions, get_distributions
from h2o.automl import H2OAutoML
from h2o.estimators.gbm import H2OGradientBoostingEstimator
from h2o.estimators.random_forest import H2ORandomForestEstimator
from h2o.grid.grid_search import H2OGridSearch
from matplotlib.pyplot import figure

sns.set(rc={"figure.figsize": (16, 8)})

# Data Imputation
!pip install fancyimpute
from fancyimpute import IterativeImputer as MICE

# Model Interpretation
!pip install shap
import shap
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import GradientBoostingClassifier
#initializing the h2o library
h2o.init()

Po përpiqem të parashikoj se cilat veçori i japin një aplikacioni për të rritur instalimet e tij.

Së pari, Ne do të importojmë grupin tonë të të dhënave në kornizën e të dhënave të pandas.

# Reading Data into Pandas Dataframe
Google_Play_Store = pd.read_csv(
    "https://raw.githubusercontent.com/panchalyash218/INFO6105/main/googleplaystore.csv"
)  # Reading CSV file into Pandas DataFrame

Përpara se të fillojmë me Analizën, Ne do të heqim kolonat e padëshiruara në grupin tonë të të dhënave dhe gjithashtu do të bëjmë disa pastrime të të dhënave pasi është një detyrë shumë e rëndësishme përpara se të kryejmë çdo analizë.

Siç mund ta shohim, kolonat si Madhësia, Instalimet dhe Rishikimet mund të konvertohen në llojin e të dhënave int duke kryer disa pastrime.

Sa i përket kolonave si Type, Content_Rating dhe Category ato përmbajnë vlera karakteresh në kolona, ​​kështu që ne po përpiqemi të kryejmë One Hot Encoding, Cat Coding.

Meqenëse kishte shumë vlera unike në kategori, kështu që kodimi One Hot nuk ishte një metodë e optimizuar, kështu që ne zbatuam kodimin Cat.

Pas kryerjes së të gjitha detyrave të pastrimit të të dhënave dhe konvertimit të llojit të të dhënave të kolonave, kështu duken të dhënat

Ne kemi disa vlera null në Rating ne zëvendësojmë vlerat null

Në grafikun e mësipërm, ne po kontrollojmë densitetin e grafikut të veçorive në grupin tonë të të dhënave. Siç mundemi, Vlerësimi ka densitetin më të madh midis të gjitha veçorive të tjera

Ne po kontrollojmë kolinearitetin midis veçorive në grupin tonë të të dhënave pasi mund të shohim se Instalimet dhe Rishikimet kanë kolinearitetin maksimal në grupin tonë të të dhënave prej 0,64.

Grafiku i mësipërm na ndihmon të kuptojmë marrëdhënien në çift midis veçorive.

Skema e mësipërme na ndihmon të kuptojmë ndikimin e veçorive në variablin tonë të synuar.

Për analiza të mëtejshme, ne do t'i ndajmë të dhënat në test dhe trainim në përkatësisht 90% dhe 10%.

Ndërsa, gjatë kryerjes së OLS në grupin tonë të të dhënave, ne po merrnim vlera shumë të paqarta rmse, kështu që ne po kryejmë shkallëzim në grupin tonë të të dhënave dhe pasi kemi kolona kategorike në grupin tonë të të dhënave, kështu që kemi përshtatur regresionin logjistik.

Lënia e rishikimit dhe pjesa tjetër e madhësisë kanë të gjitha një vlerë P ‹ 0,05 e cila nuk është e rëndësishme.

Ne kemi provuar të përdorim 3 modele pemësh për të kontrolluar se cila pemë ka saktësinë më të mirë në grupin tonë të të dhënave.

Tani, ne do të importojmë kornizën e të dhënave të pandas tonë në kornizën e të dhënave h2o për të kontrolluar modelin më të mirë AutoMl.

Ne do t'i ndajmë të dhënat në kornizën e të dhënave H2o në Test dhe Train përkatësisht 60% dhe 40%.

pct_rows = 0.60  # Setting up the data split between training and test dataset.
df_train, df_test = new_hf.split_frame([pct_rows])
# Setting up AutoML
def autoML(df_train, df_test):

    X = df_train.columns
    y = "Installs"

    X.remove(y)  # Removing the result frm our predictors data

    aml = H2OAutoML(max_runtime_secs=222, seed=1)  # Setting of AutoML
    aml.train(
        x=X, y=y, training_frame=df_train
    )  # Trainig the dataset on different models

    return df_train, df_test, aml


# Function to get best model from the AutoML leaderboard
def getBestModel(aml):
    model_index = 0
    glm_index = 0
    aml_leaderboard_df = aml.leaderboard.as_data_frame()
    models_dict = {}

    for m in aml_leaderboard_df["model_id"]:
        models_dict[m] = model_index
        if "StackedEnsemble" not in m and "GBM" not in m:
            break
        model_index = model_index + 1

    for m in aml_leaderboard_df["model_id"]:
        if "GLM" in m:
            models_dict[m] = glm_index
            break
        glm_index = glm_index + 1

    print(model_index)
    best_model = h2o.get_model(aml.leaderboard[model_index, "model_id"])
    return best_model
autoML = autoML(df_train, df_test)  # Training AutoML
autoML[2].leaderboard  # Leaderbord of AutoML output

from h2o.estimators.gbm import H2OGradientBoostingEstimator
from h2o.transforms import H2OScaler
# Split data into train and test sets
df_train, df_test = new_hf.split_frame(ratios=[0.8])

# Create an instance of H2OScaler with the "center" and "scale" arguments
scaler = H2OScaler(center=True, scale=True)

# Fit the scaler to the training data
scaler.fit(df_train)

# Scale the training data
scaled_train = scaler.transform(df_train)

# Scale the test data
scaled_test = scaler.transform(df_test)

# Train the model on the scaled training data
model = H2OGradientBoostingEstimator()
model.train(x=df_train.columns[:-1], y="Installs", training_frame=scaled_train)

# Make predictions on the scaled test data
predictions = model.predict(scaled_test)

# Compute the RMSE value on the scaled test data
rmse = model.model_performance(scaled_test).rmse()

# Print the RMSE value
print("RMSE:", rmse)
from h2o.estimators.glm import H2OGeneralizedLinearEstimator
# Define the predictor columns and response column
predictors = df_train.columns[:-1]
response = "Installs"

# Create an instance of H2OGeneralizedLinearEstimator with regularization
model = H2OGeneralizedLinearEstimator(alpha=0.5, lambda_=0.1)

# Train the model on the training data
model.train(x=predictors, y=response, training_frame=df_train)

# Make predictions on the test data
predictions = model.predict(df_test)

# Compute the RMSE value on the test data
rmse = model.model_performance(df_test).rmse()

# Print the RMSE value
print("RMSE:", rmse)

Më sipër kemi kryer gjithashtu rregullim dhe shkallëzim pasi po merrnim vlera shumë të paqarta rmse në kornizën e të dhënave H2o.

AutoML Model 1 doli të jetë modeli më i mirë AutoML për grupin tonë të të dhënave.

autoML_model.explain(autoML[1])  # AutoML Explainability

Ne kemi përdorur kodin e mësipërm për të hartuar parcela të ndryshme si Plot i mbetur, PDP dhe Përmbledhje Shap, dhe shumë të tjera për modelin më të mirë AutoML.

Analiza e mbetur paraqet vlerat e përshtatura kundrejt mbetjeve në një grup të dhënash testuese. Në mënyrë ideale, mbetjet duhet të shpërndahen rastësisht. Modelet në këtë grafik mund të tregojnë probleme të mundshme me zgjedhjen e modelit, p.sh., duke përdorur modele më të thjeshta se ç'duhet, duke mos marrë parasysh heteroskedasticitetin, autokorrelacionin, etj. Vini re se nëse shihni vija "me vija" të mbetjeve, ky është një objekt i të paturit një numër të plotë -variabla e përgjigjes me vlerë (në krahasim me një variabël me vlerë reale).

Grafiku i kurbës së mësimit tregon funksionin/metrikën e humbjes që varet nga një numër përsëritjesh ose pemësh për algoritme të bazuara në pemë. Kjo skemë mund të jetë e dobishme për të përcaktuar nëse modeli përshtatet më shumë.

Grafiku i rëndësisë së ndryshueshme tregon rëndësinë relative të variablave më të rëndësishëm në model.

Siç mund ta shohim sekuenca e Plot - Rishikimi është variabli më i rëndësishëm e kështu me radhë.

Grafiku përmbledhës i SHAP tregon kontributin e veçorive për çdo instancë (rresht të dhënash). Shuma e kontributeve të veçorive dhe termit të paragjykimit është e barabartë me parashikimin e papërpunuar të modelit, d.m.th., parashikimin përpara aplikimit të funksionit të lidhjes së kundërt.

Një grafik i varësisë së pjesshme (PDP) jep një përshkrim grafik të efektit margjinal të një ndryshoreje në përgjigje. Efekti i një variabli matet në një ndryshim në përgjigjen mesatare. PDP supozon pavarësinë midis veçorisë për të cilën llogaritet PDP dhe pjesës tjetër.

Një grafik i Pritshmërisë Individuale të Kushtëzuar (ICE) jep një përshkrim grafik të efektit margjinal të një ndryshoreje në përgjigje. Komplotet ICE janë të ngjashme me parcelat e varësisë së pjesshme (PDP); PDP tregon efektin mesatar të një veçorie ndërsa grafiku ICE tregon efektin për një shembull të vetëm. Ky funksion do të paraqesë efektin për çdo decilë. Në kontrast me PDP, grafikët ICE mund të ofrojnë më shumë njohuri, veçanërisht kur ka ndërveprim më të fortë të veçorive.

Zgjedhja e modelit

Veçoria e madhësisë dhe e rishikimeve ka varësi të pjesshme nga instalimet e variablave të synuara sipas skemës së mësipërme të përdorur për SVM.

Është e lehtë të kuptosh konceptin që qëndron në themel të rëndësisë së veçorive SHAP: Karakteristikat me vlera të larta absolute Shapley janë domethënëse. Ne mesatarizojmë vlerat absolute Shapley për çdo veçori përgjatë të dhënave, sepse duam të përcaktojmë rëndësinë globale. Veçoritë më pas renditen dhe vizatohen në rend në rënie të rëndësisë.

Komploti i mëposhtëm është

Grafiku i rëndësisë së veçorive SHAP për modelin SVM Duke përdorur grafikun e mësipërm mund të arrijmë në përfundimin se Size është tipari më i rëndësishëm, i ndjekur nga Rishikimet.

Le të shqyrtojmë të njëjtin mostër (sample_ind = 18).

Ai thotë se f(x) = 5000000.786 është ajo që kemi marrë si rezultat i modelit dhe prodhimi i pritur për këtë mostër ishte 5e+0834.384. Modeli i ujëvarës shpjegon se si morëm rezultatin e pritur dhe cilat veçori kontribuan në çfarë. Grafiku i mëposhtëm tregon se Madhësia ka ndikimin më të madh dhe më pozitiv në rritjen e instalimeve të një aplikacioni. E ndjekur nga Rishikimet.

Këtu veçoritë janë renditur në rend zbritës të rëndësisë së tyre. Kjo është një nga mënyrat më të lehta për të analizuar një model ML dhe se si veçoritë po ndikojnë në objektiv dhe në çfarë mase.

Çdo pikë (e kuqe dhe blu) përfaqëson një veçori të një APP të Dyqanit të Google Play Ngjyra e kuqe përfaqëson vlera të larta ndërsa ngjyra blu përfaqëson vlera të ulëta Nëse një pikë (një veçori e aplikacionit të "Dyqanit të Google Play) është në anën e djathtë të y- aksi atëherë ka pasur një ndikim pozitiv dhe nëse është në anën e majtë të boshtit ka pasur një ndikim negativ Pozicioni i një pike (një tipar i aplikacionit Google Play Store) në boshtin x përfaqëson intensitetin e ndikimit që ka pasur, sa më shumë të jetë larg boshtit më i madh është intensiteti. Le të përpiqemi të kuptojmë se si veçoritë po ndikojnë në model.

Një vlerë më e lartë e Madhësisë priret të ketë një ndikim pozitiv në instalimet e një aplikacioni Vlerat më të larta të Rishikimeve priren të kenë një ndikim pozitiv në instalimet e një aplikacioni. Ne gjithashtu mund të interpretojmë intensitetin e ndikimit.

Ky vizualizim është shumë i dobishëm kur bëhet fjalë për interpretimin se si funksionon modeli ynë.

Ky vizualizim është një përmbledhje e të gjithë grupit të të dhënave se si çdo pikë e të dhënave në çdo veçori po ndikon në objektivin (Instalon). Këtu boshti Y është Veçoritë dhe boshti X është shembulli i asaj veçorie Ngjyra e shembullit përcakton nëse ka pasur një efekt pozitiv apo efekt negativ nga ngjyra e tij. Nëse shembulli është i kuq, atëherë ai ka një efekt pozitiv dhe nëse shembulli është blu atëherë ka një efekt negativ. Intensiteti i ngjyrës është drejtpërdrejt proporcional me intensitetin e efektit. Sa më e thellë të jetë ngjyra, aq më ndikues është tipari

Rezultatet e mësimit

1. Kam fituar njohuri për të gjithë ciklin jetësor të projektit të shkencës së të dhënave, nga përgatitja e të dhënave deri te rregullimi i hiperparametrave.

2. Pjesa më e madhe e kohës duhet të shpenzohet për përgatitjen e të dhënave, si pastrimi, normalizimi, zgjedhja e veçorive, vlerat e imputuara, etj.

3. Shumica e praktikuesve anashkalojnë rregullimin e hiperparametrave, i cili është hapi i dytë më i rëndësishëm pas përgatitjes së të dhënave. Megjithatë, rezultati justifikon kohën e shpenzuar.

4. Duhet të trajnohen disa modele, dhe modelet më të mira duhet të zgjidhen për vendosje, sepse disa algoritme janë dukshëm më efektive se të tjerët në kryerjen e detyrave të caktuara.

Mësimi më i vlefshëm nga kjo seri aktivitetesh është

5.Interpretimi i modelit (Zbërthimi i kutisë së bllokut të zi). Të kuptuarit e asaj që bëri që një model të parashikonte me saktësi një rezultat është bërë më i thjeshtë nga SHAP, LIME dhe PDP.

Referencat

1. https://docs.h2o.ai/h2o/latest-stable/h2o-docs/grid-search.html

2. https://towardsdatascience.com/explain-your-model-with-the-shap-values-bc36aac4de3d

3. https://github.com/aiskunks/YouTube/blob/main/A_Crash_Course_in_Statistical_Learning/Full_ML_Report/Wine-Quality-Analysis.ipynb

4. Chatgpt

5. https://github.com/panchalyash218/INFO6105/blob/main/Combine_all_in_one_report.ipynb

Autori - Yash Panchal, "Nik Bear Brown"