Skip to main content

Analyser la perte de clients

Perdre un ancien utilisateur apportera de grosses pertes, la société doit peut-être obtenir 10 nouveaux utilisateurs à maquiller. Comment prédire le client à venir, laisser la société prendre des mesures de récupération appropriées et constituer les principaux problèmes que chaque entreprise est impliquée.


Objectifs
Utilisez le réseau nerveux pour créer un modèle d'analyse de perte d'utilisateur pour prédire si les utilisateurs sont perdus ou non.
Outils
Notebook Jupyter: un éditeur de Python convient particulièrement aux analystes de données, à la fois recommandé à chaque utilisateur.
Python: Python est la langue linguistique la plus populaire à l'âge de l'âge de la machine. De nombreuses bibliothèques peuvent être apprises, peuvent facilement effectuer des machines d'apprentissage de machines et une efficacité.
Le paquet Python est principalement utilisé

Pandas: basé sur des packages d'analyse de données construits par NUMPY contenant des structures et des outils de données plus avancés. C'est-à-direPratique pour nettoyer de nombreux types de données. C'est l'un des packages Python que chaque analyseur de données doit apprendre.

Sklearn: Il s'agit d'un package tiers couramment utilisé dans l'apprentissage de la machine. Il est emballé dans certaines méthodes d'apprentissage pour aider à utiliser plus facilement les méthodes d'apprentissage de la machine. Cet article utilise principalement ce package pour former des ensembles de données et des ensembles de données et standardiser l'échelle de données.

Keras: En tant qu'Appe neurologique senior, Keras écrit par Pure Python dans un gamin Tensorflow, Thelanto et CNTK Bondend. Cet article est basé sur

Backend Tensorflow construit un modèle réseau nerveux. Tensorflow est une intelligence artificielle open source développée par Google.



1. Lire les données de test de perte d'utilisateur






#载入pandas包来读取csv格式的数据集import pandas as pd#把 csv格式的数据集导入到DataFrame对象中df = pd.read_csv('C:/Users/36540/Desktop/lossertest.csv', header = 0)df.head()





#把totalPaiedAmount列也就是用户付款金额的缺失值替换为0df['totalPaiedAmount'] = df['totalPaiedAmount'].fillna(0)df['totalBuyCount'] = df['totalBuyCount'].fillna(0)


#利用pandas中的to_datetime函数把字符串的日期变为时间序列df['registrationTime'] = pd.to_datetime(df['registrationTime'], format='%Y-%m-%d %H:%M:%S')df['registrationTime'] .




#同理最近登录时间也转化为实践序列df['lastLoginTime'] = pd.to_datetime(df['lastLoginTime'], format='%Y-%m-%d %H:%M:%S') df['lastLoginTime']



import datetime#获取当前时间now_time = datetime.datetime.now()now_time]
]

Nous utilisons le package Pandas pour saisir les données de format CSV placées dans l'objet DataFrame, sur le point d'introduire l'objet du jeu de données, de gauche àDroite, ID utilisateur, Pays, Délai d'inscription, Classe d'utilisateur B, heure de connexion récente, quantité d'achat, montant d'achat, trou marqué.


2. Nettoyer les données
Nous devons convertir toutes les données en données numériques et aucune valeur n'est manquante.
#把数据序列转化为距今的时间间隔df['registrationTime'] = now_time-df['registrationTime']df['registrationTime']
Selon la logique commerciale, le montant du paiement et le montant du paiement ont été remplacés par 0.

df['lastLoginTime'] = now_time-df['lastLoginTime']df['registrationTime']

directement importés de Panda Les données sont l'heure du format de chaîne et nous devons convertir des données en format de la série chronologique. Ceci est la fonction to_dateTime fourni avec des pandas, qui peuvent facilement se convertir rapidement en une série de temps.


Selon la logique de service, le temps est nécessaire pour convertir la période de temps.


#把最近登录时间列的空值替换为同索引行注册时间列的值df.loc[df['lastLoginTime'].isnull(),'lastLoginTime']=df[df['lastLoginTime'].isnull()]['registrationTime']df['registrationTime']
Selon le paquet DateTime, l'heure actuelle a été obtenue.



#因为数据量有点大,取前1w行数据测试下df = df.iloc[0:1000]#把时间间隔转化为数值型的天数j = 0for i in df['registrationTime']: df = df.replace(df['registrationTime'][j],i.days) j += 1
Dans l'objet DataFrame, vous pouvez directement 2 fois les données de format sont soustraites pour avoir eLa période. Mais ce n'est pas une forme numérique, nous devons également le gérer.

Remplacez d'abord le temps de connexion récent de la logique d'entreprise à l'heure d'inscription. #不知道为什么这样操作就会报错,欢迎大家研究研究for i in range(0,df['registrationTime']): df = df.replace(df['registrationTime'][i],df['registrationTime'][i].days)


Il est pratique de remplacer la valeur manquante sous Isnull de Pandas.

#对数据集进检查,看看是否还有缺失值df[df.isnull().values==True]
Créer une boucle pour convertir toute la compatibilité de temps en chiffres ,. Les fonctions de date peuvent facilement obtenir le nombre de jours de jours. Après avoir pratiqué que Python ait une manipulation très lente de cet interrupteur. J'ai donc pris les 1000 premières données pour les tests. Vous devez utiliser la fonction de temps dans MySQL pour obtenir la différence de temps et la vitesse de traitement dans la base de données beaucoup plus rapidement. Mes données 50W + peuvent être effectuées aussi longtemps que 10 secondes.

Au début, j'ai écrit les boucles comme celle-ci, je ne sais pas pourquoi il y a des événements. Je n'ai pas trouvé de raison pour beaucoup d'informations. Aussi bienvenue la basen Recherche de recherche. Trouvez la raison pour laquelle vous pouvez commenter ou vous croire privé.


#把第一列无用的用户ID列删除df = df.iloc[:,1:] Nettoyage Les données ici sont essentiellement complétées, je vérifierai enfin à nouveau si l'ensemble de données est également précieux.


df.head()df.info() On peut constater que les colonnes de la valeur manquante n'existent pas. Ensuite, la première colonne est supprimée pour la colonne ID utilisateur indépendante du résultat.


Toutes les étapes de nettoyage des données sont terminées, permettez-moi de voir les données définies maintenant et de vérifier enfin le résultat de traitement.




Vous pouvez voir que toutes les données sont devenues Float64 ou Int64, nous ont atteint. Le but de la manipulation.
#把输入输出项确定下y = df.iloc[:,-1]x = df.iloc[:,:-1]x.shapey.shape
Ensuite, déterminez l'élément d'entrée et de sortie, les 6 premières colonnes sont les indicateurs d'entrée et le marqueur de colonne final est l'élément.


Vous pouvez trouver que l'entrée est de 1000 lignes de données, 6 colonnes. La sortie est de 1000 lignes, 1 colonne.


#sklearn把数据集拆分成训练集和测试集from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.33, random_state = 123)x_train.shapey_train.shapex_test.shapey_test.shape


Peut être très pratique pour utiliser la fonction Train_Test_split dans le paquet Skle savoir. Distinguer la pratique et les tests. Test_size Express La taille de l'essai, 0,33 est la proportion de kits de test et 3: 1, aléatoire_state montre une norme aléatoire distinguée, sinon, le résultat de chaque séparation est différent, cette propriété est pour les données qu'il peut être restauré. N'utilisez pas vous pouvez remplir avec désinvolture. Comme on peut le voir à partir de l'image ci-dessus, les données ont été divisées en 670 lignes et 330 lignes de 2 ensembles de données.


Taux standardisés

Tous les réseaux neurologiques doivent être normalisés car la taille de différentes colonnes est différente, il est donc impossible d'effectuer une contre-attaque d'incompétabilité. Vous devez donc normaliser le jeu de données.

#使用sklearn把数据集进行尺度标准化from sklearn.preprocessing import StandardScalersc = StandardScaler()x_train = sc.fit_transform(x_train)x_test = sc.fit_transform(x_test)x_test
La fonction standard de l'emballage SKNEARN peut faciliter l'identification et la variance des données. Tout d'abord définir un objet, SC = StandardsCaler (), puis mettre des données dans le malPeut être placé directement dans l'achèvement de la normalisation. L'ensemble de données de sortie est affiché ci-dessus.
Ann Formation

Nous utilisons le paquet Keras pour compléter la relaxation de la construction de réseaux nerveux artificiels. Premier chargement d'un modèle séquentiel. Le modèle de séquence est une pile linéaire de réseaux multicouches, ce qui signifie "un chemin d'aller au noir". Ce modèle peut être construit en transmettant une liste d'une couche dans le modèle séquentiel ou par la méthode .add () ajoutée au modèle. Cet article utilise. Ajouter () Méthode pour entrer un modèle d'entrée de réseau neuronal à 2 couches. Le choix de l'optimiseur est SGD en raison de la petite quantité de données et du nombre de formations n'est pas beaucoup, alors choisissez le SGD le plus intéressant. ADAM Optimizer peut être utilisé pour les exigences de performance.


Ajoutez la couche d'entrée / sortie du réseau nerveux dans le modèle. #使用keras包搭建人工神经网络import keras#序贯(Sequential)模型包from keras.models import Sequential#神经网络层from keras.layers import Dense#优化器from keras.optimizers import SGD#创建一个空的神经网络模型classifier = Sequential()
L'épaissesse est une couche de connexion complète utilisée, l'opération est déployée comme sortie =Activer (points (entrée, noyau) + biais).
Paramètres
#创建输入层classifier.add(Dense(units = 3, kernel_initializer = 'uniform', activation = 'relu', input_dim = 6))#创建输出层classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sig
Unité des unités supérieures à 0 montrant la taille de sortie de la classe. En général, la moitié des éléments d'entrée, mais la valeur réelle est toujours formée.
Activation: fonction d'activation, pour le nom de la fonction d'activation prédéfini (fonction d'activation de référence) ou fonctionner en fonction de l'élément-sage. Si ce paramètre n'est pas spécifié, aucune fonction d'activation ne sera pas utilisée (même si la fonction activée linéaire est utilisée: a (x) = x). Cet article utilise relu et sigmoïdes. C'est le plus basique.

BIAS_INITIALISANT: Méthode de création de vecteur de biais, une chaîne de méthode d'initialisation prédéfinie ou d'initialisation définie pour initialiser les vecteurs de biais. Différentes classes peuvent utiliser différents mots-clés pour réussir la méthode d'initialisation, spécifier généralement les mots-clés de la méthode d'initialisation. Les outils de développement sont alloués uniformément dans cet article et KHL'homogénéité de Xavier est créée à partir de [-Limit, limite], dans laquelle la limite est SQRT (6 / (5 / (Fan_in + fan_out)). Fan_in est le nombre d'unités d'entrée de pesage ténor et ventilateur du nombre de cellules de sortie de la Conteneur de réservoir.

Le cas le plus courant (Batch_Size, INPUT_DIM) est la plaque 2D




La fonction perd le modèle à binaire_crossotropie (également connu sous le nom de LOGARITHMS, LOGLOSS) . La fonction cible ou la fonction perdue est que l'un des deux paramètres doit être compilé.

Sélection d'une optimisation SGD, est l'optimiseur de base le plus simple.
Le module estimé offre une Variété de fonctions pour le modèle Performance Reviews définie par la traduction de mots-clés mesurées. Les fonctions d'évaluation de la fonction similaires à la fonction cible, seuls les résultats de l'évaluation de la performance ne seront pas utilisés pour s'entraîner.

KERAS basé sur une matrice numpy sous la forme de type de données des données d'entrée et d'étiquettes. Le modèle de formation est souvent utiliséC Fitness. Entrez dans le kit d'entraînement, puis batch_size Sélectionnez le nombre de cours de formation pour chaque cours de formation, Epochs est le nombre de formations. Authentication_Data Dataset a été vérifié. Enfin, la perte des résultats de formation ci-dessus était de 0,0973 et l'ACC était de 0,9612. Ce résultat était un meilleur résultat. Utilisation de prévisions pour exporter les résultats du kit de test, la valeur de probabilité de 0-1, i Peut supposer que plus de 0,5 perdu, changeant des résultats en 0 et 1 et résultats. 0.5 est juste une valeur possible, les mots les plus appropriés ou vous devez le vérifier vous-même. Enfin, la commutation des résultats dans 0 et 1 et la conversion d'une donnée à sens unique via des données d'aplatir de barres et de l'historique ASTYPE (INT) est Vrai et tort dans 0 et 1. Selon les résultats d'Accuracy_Score, on peut trouver un résultat de 0,9727, c'est un bon résultat. La précision est de 97%. Mais nous venons de regarder les données pour être kAssez, parce que seulement 50 personnes perdus dans 1000 personnes, je n'étais pas manqué, la précision était donc de 95%. Alors regardez l'exactitude de la perte et aucune perte. Il était possible de constater que tous les utilisateurs non fluides peuvent être devinés, mais seulement 3 utilisateurs. NOTE Le modèle doit être amélioré pour l'exactitude des utilisateurs qui ne sont pas puissants. Le résultat est un résultat plus détaillé. Réception en direct avec la fonction de classification_Report. Nous avons observé que l'utilisateur F1 des utilisateurs est inférieur à 0,40. C'est une petite valeur et a une forte augmentation de l'espace. Bien que toute la précision des utilisateurs soit de 97%, il semble très beau et le résultat de la division réelle n'est pas satisfaisante. Bien entendu, il s'agit d'un résultat d'un test et nous pouvons augmenter la couche d'entrée. Les indicateurs de données augmentent le nombre de formation pour améliorer la précision.

Sujets

Catégories