Technologie

Pyspark – prévisions avec Pandas UDF et fb-prophet

Pyspark - prévisions avec Pandas UDF et fb-prophet


Prévoyez plusieurs séries temporelles à la fois avec prophète et pandas UDF sans boucle.

0*2YBwoi3xPiFWW84t - Pyspark - prévisions avec Pandas UDF et fb-prophet

Avant de commencer quoi que ce soit pour travailler avec pandas-udf le prérequis sont

  • étincelle ≥ 2,4
  • pyarrow ≤ 0.14.1 (au-dessus de cette version, il y a un problème)

nous devons ensuite configurer une variable d'environnement pour pyarrow à 1. (voir le code d'importation)

sudo pip3 install pyarrow = 0.14.1

Ensuite, nous pouvons procéder à l'importation des bibliothèques.

de pyspark.sql importation SparkSession
depuis pyspark.sql.types import *
à partir de pyspark.sql.functions, importez pandas_udf, PandasUDFType, sum, max, col, concat, lit
importer sys
importer os
# configuration pour contourner les pandas udf
# voir les réponses ici https://stackoverflow.com/questions/58458415/pandas-scalar-udf-failing-illegalargumentexception
os.environ["ARROW_PRE_0_15_IPC_FORMAT"] = "1"
de fbprophet import Prophet
importer des pandas en tant que pd
import numpy as np

Si tout va bien, nous pouvons appeler le contexte de l'étincelle par «sc» et voir:

Maintenant, nous pouvons parler de la partie intéressante, les prévisions!

Dans ce tutoriel, nous utiliserons les nouvelles fonctionnalités de pyspark: le pandas-udf, comme le bon vieux pyspark UDF, le pandas-udf est une fonction définie par l'utilisateur dans le but de appliquez nos bibliothèques les plus préférées comme numpy, pandas, sklearn et plus sur Spark DataFrame sans rien changer à la syntaxe et retourner un Spark DataFrame.

En particulier, nous explorerons les Attributs GROUPED_MAP des Pandas UDF qui nous permettent de postuler scikit-learn, modèles de statistiques et plus à notre Spark DataFrame. Nous appliquerons la régression par morceaux du Prophète de l'IA Facebook à chaque élément | stocker dans notre jeu de données en utilisant Pandas UDF sans aucune boucle et sans aucune concaténation des résultats puisque Prophet ne traite pas plusieurs séries chronologiques en même temps.

Pandas_udf peut être passé à la fonction de base en tant que décorateur qui enveloppe la fonction entière avec deux paramètres: les schémas de sortie attendus et GROUPED_MAP les attributs.

# définir un schéma de sortie
schéma = StructType ([[
StructField ("store", StringType (), True),
StructField ("item", StringType (), True),
StructField ("ds", DateType (), True),
StructField ("yhat", DoubleType (), True)
])

Avec le décorateur défini, le reste est très simple et intuitif; nous définissons notre fonction d'ajustement et de prévision de nos données comme nous le faisons pour une seule série.

Ma fonction est très simple, j'accepte en entrée une trame de données Spark qui est le résultat de la concaténation de l'ensemble de formation et de l'ensemble de test (avec la cible initialisée à null) qui est mon historique de vente pour tout article (le format est un Spark Trame de données). La fonction sera appliquée comme s'il n'y avait qu'une seule paire produit-magasin et comme un Pandas DataFrame donc pas de changement de syntaxe, donc nous définissons les dates de formation et de prévision et renommons les colonnes de dates et de ventes par les conventions demandées par l'algorithme, puis je appeler ma fonction qui crée un cadre de données d'événement national (format: Pandas DataFrame). Ensuite, je passe tout dans l'algorithme, fais les prévisions et j'attache mon cadre de données de prévision qui ne contient que la date et les prévisions associées à mon jeu de test initial afin de récupérer le produit et l'identifiant du magasin. Toute la fonction est enveloppée dans pandas-udf et .. c'est tout!

  • N.B: l'argument des vacances dans Prophet n'est qu'un DataFrame de pandas "codé en dur" disponible dans le cahier.

Nous pouvons former notre modèle.

Si tout se passe bien, la console doit consigner chaque série chronologique formée avec quelques métriques.

Ensuite, chaque série est prédite, nous les regroupons dans un seul Spark DataFrame sans concaténation.

La magie opère! Nous avons prédit environ 50 séries de séries chronologiques en un clin d'œil sans complication, sans boucle for et sans récupération des résultats.

Dans ce court tutoriel, nous voyons comment utiliser pandas udf pour entraîner plusieurs modèles afin de prévoir plusieurs séries temporelles à la fois de manière distribuée. Les principaux avantages de pandas UDF par rapport au fait qu'il nous permet de sauter la boucle et la partie de concaténation est le temps de calcul que nous gagnons en le faisant à travers un cadre distribué, chaque série chronologique est formée sur une partition différente sur un travailleur différent et le tout est rassemblé à la fin, c'est un réel avantage par rapport à une boucle qui peut prendre un certain temps à courir pour des millions d'éléments avec des données réelles.

le cahier est disponible sur mon Github ici: https://github.com/AlexWarembourg/Medium et les données sont disponibles sur Kaggle (le lien est sous commentaires dans le cahier et l'essentiel. Merci!

Afficher plus

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer