Application de recommandation de prix avec Python

Contenu

“Au moment où vous faites une erreur de prix, érode votre réputation ou vos profits”. – Catherine Paine

L'optimisation des prix consiste à utiliser des données historiques pour identifier le prix le plus approprié d'un produit ou d'un service qui maximise la rentabilité de l'entreprise. Il existe de nombreux facteurs tels que la démographie, les coûts d'exploitation, données de l'Enquête, etc. qui jouent un rôle dans la tarification efficace, cela dépend aussi de la nature des entreprises et du produit servi. La société ajoute / mettre à jour régulièrement les fonctionnalités pour ajouter plus de valeur au produit et, évidemment, cela a un coût associé en termes d'effort, temps et, le plus important, la réputation des entreprises.

Par conséquent, il est important de comprendre le prix correct, un peu trop haut, vous perdrez vos clients et une légère sous-tarification entraînera une perte de revenus. L'optimisation des prix aide les entreprises à trouver le bon équilibre entre des prix efficaces, atteindre les objectifs de profit et servir également vos clients. Dans ce blog, nous examinerons l'approche simpliste de l'optimisation des prix et créerons également une application de simulation.

85709maison-9941683

Chiffre 1: Instantané de l'application de recommandation de prix

Les défis de l'optimisation des prix:

Optimisation des prix pour un seul produit: L'optimisation des prix pour un seul produit prédit l'évolution de la demande en réponse à différents prix. Aide l'entreprise à fixer les prix que les clients sont prêts à payer et à maximiser les profits. Par exemple: sur le marché des smartphones, c'est un bon équilibre entre les nouvelles fonctionnalités et le prix.

Optimisation des prix pour une famille de produits: Toute modification du prix d'un produit peut déclencher une réaction en chaîne dans une famille de produits. Pourtant, La tarification des familles de produits devient une tâche ardue. Pas .: Sur le marché des glaces, il peut y avoir différentes saveurs, tailles comme dans les tasses, des sucreries, cônes, packs familiers ou tarrinas. C'est le même produit avec des tailles et des prix différents.

Avantages de l'optimisation des prix:

Avantages économiques immédiats: Las empresas pueden obtener resultados instantáneos al apuntar a múltiples KPI, Soit marge, conversions de ventes, ajouter de nouveaux clients ou entrer dans un nouvel espace de marché, etc., puis examinez les résultats pour apporter les modifications de prix appropriées.

Automatisation des processus métier: Les optimisations de prix devraient être davantage un processus axé sur les données. Analyse des données historiques, tendances des ventes, demande, etc. aide les entreprises à concevoir des règles ou à créer des modèles de ML ou à créer un modèle hybride entièrement automatisé, éliminant ainsi les erreurs humaines ou les décisions de tarification basées sur les émotions.

Réponse rapide aux tendances changeantes du marché: La demande et la tendance du marché changent assez fréquemment et, parfois, lorsqu'un concurrent lance un produit similaire à un prix inférieur, mange les actions des autres. Dans un tel scénario, l'optimisation des prix des produits dans un segment de produit ou une géographie particulier aide les entreprises à relever ce défi.

Objectifs:

Nous explorerons les prochaines étapes et, à la fin de ce blog, nous allons créer le Application de simulation d'optimisation des prix avec script d'intrigue.

  • Présentation de l'optimisation des prix
  • Défis et avantages de l'optimisation
  • Exploration des données
  • Construction et optimisation de modèles
  • Développement d'applications avec Plotly Dash
  • Défis dans la création et la mise en œuvre de modèles et d'applications d'optimisation des prix

Départ:

Données: Nous utiliserons les données des jouets. Prix.csv et voici un aperçu rapide des données. Comme l'ensemble de données est petit et propre, aucun prétraitement n'est nécessaire.

Année Trimestre Quantité Prix          
1977	1	22.9976	        142.1667
1977	2	22.6131	        143.9333
1977	3	23.4054	        146.5000
1977	4	22.7401	        150.8000
1978	1	22.0441	        160.0000
1978	2	21.7602	        182.5333
1978	3	21.6064	        186.2000
1978	4	21.8814	        186.4333
1979	1	20.5086	        211.7000
1979	2	19.0408	        231.5000

Structure du projet: Voici la structure de notre projet.

Optimisation des prix

| app.py # Le fichier pour créer des applications qui ont une logique de rappel et une interface utilisateur

+ -Les atouts # La feuille de style qui définit l'esthétique de l'application.

|

+ -Données

| prix.csv # Le fichier de jeu de données

+ -Python

| optimizar_precio.py # Le fichier Python avec logique pour l'optimisation des prix.

| optimizar_cantidad.py # Le fichier python avec logique pour l'optimisation des quantités

Chargement des bibliothèques: Créons un fichier par nom optimizar_precio.py et chargez toutes les bibliothèques nécessaires.

importer des pandas au format pd
importer numpy en tant que np
à partir de pandas importer DataFrame
importer matplotlib.pyplot en tant que plt
importer seaborn comme sns
à partir de statsmodels.formula.api importer des outils
importer plotly.express au format px
importer plotly.graph_objects au fur et à mesure

Regardons la relation entre le prix et la quantité et nous nous attendons à voir une tendance linéaire.

fig_PriceVsQuantity = px.scatter(

df, x="Prix", y ="Quantité", couleur="Coût", ligne de tendance="vieux")

fig_PriceVsQuantity.show()
42635prixvsquantité-4126457

Chiffre 2: Prix ​​Vs Quantité

Construire un modèle de base: Dans notre cas, nous allons construire un modèle OLS (Moindres carrés ordinaires) très basique.

# adapter le modèle OLS
modèle = ols("Quantité ~ Prix", données=df).ajuster()

Plage d'optimisation: Dans la majorité des cas, nous avons une idée approximative des prix minimum et maximum basés sur l'expérience passée. Comment nous sommes en train d'identifier le meilleur prix, ce sera un bon point de départ et nous l'affinerons davantage avec plusieurs itérations.

  Prix ​​= liste(gamme(var_range[0], var_range[1], 10))
    coût = entier(var_coût)
    quantité = []
    Revenu = []
    pour moi dans le prix:
        demande = modèle.params[0] + (model.params[1] * je)
        quantité.ajouter(demande)
        Revenu.append((Je coûte) * demande)

Nous allons créer un bloc de données avec le 3 Colonnes de prix, Revenu et Montant qui nous permettront d'accéder facilement à ces valeurs lors de la phase de développement de l'application.

profit = pd.DataFrame({"Prix": Prix, "Revenu": Revenu, "Quantité": quantité})

max_val = profit.loc[(profit['Revenu'] == bénéfice['Revenu'].max())]
64863tableraw-7182955

Graphique linéaire de optimización: Voici la fonctionnalité que nous prévoyons d'avoir sur le graphique.

  • Le graphique doit être mis à jour en fonction de la sélection d'une fourchette de prix par l'utilisateur / quantité ou peut-être un coût fixe.
  • Le graphique doit indiquer le point exact où le revenu est le plus élevé.
fig_PriceVsRevenue = go.Figure()
    fig_PriceVsRevenue.add_trace(aller.Scatter(
        x=bénéfice['Prix'], y=bénéfice['Revenu']))
    fig_PriceVsRevenue.add_annotation(x=entier(max_val['Prix']), y=entier(max_val['Revenu']),
                                      texte="Revenu maximal",
                                      showarrow=Vrai,
                                      pointe de flèche=1)
    fig_PriceVsRevenue.update_layout(
        showlegend=Faux,
        xaxis_title="Prix",
        yaxis_title="Revenu")
    fig_PriceVsRevenue.add_vline(x=entier(max_val['Prix']), largeur_ligne=2, line_dash="tiret",
                                 line_color="rouge", opacité=0.25)
28397max20revenu-3778606

Chiffre 3: Prix ​​vs revenu

Mettre tous ensemble: La logique de l'optimisation des prix sera dans le fichier. optimizar_precio.py

importer des pandas au format pd
importer numpy en tant que np
à partir de pandas importer DataFrame
importer matplotlib.pyplot en tant que plt
importer seaborn comme sns
à partir de statsmodels.formula.api importer des outils
importer plotly.express au format px
importer plotly.graph_objects au fur et à mesure
def fun_optimize(var_opt, var_range, var_coût, df):
    fig_PriceVsQuantity = px.scatter(
        df, x="Prix", y ="Quantité", couleur="Coût", ligne de tendance="vieux")
    # adapter le modèle OLS
    modèle = ols("Quantité ~ Prix", données=df).ajuster()
    Prix ​​= liste(gamme(var_range[0], var_range[1], 10))
    coût = entier(var_coût)
    quantité = []
    ......................
    ......................

    revenir [profit, fig_PriceVsRevenue, fig_PriceVsQuantity, tour(max_val['Prix'].valeurs[0],2),tour(max_val['Revenu'].valeurs[0],3)]

Optimisation de la quantité: Nous suivrons une approche similaire pour optimiser le montant d'une restriction donnée pour un revenu maximum.. Par souci de concision et pour que le blog ne soit pas étendu, je ne mettrai pas le code dans le blog, mais n'hésitez pas à accéder au code depuis optimizar_cantidad.py

Développement d'applications:

Nous allons développer une application d'optimisation des prix avec Plotly Dash, qui est un framework python pour créer des applications de données. Créons un fichier par nom app.py et commencer à charger les bibliothèques.

Paso 1: chargement de la bibliothèque:

tiret d'importation
importer des pandas au format pd
importer numpy en tant que np
importer dash_table
importer la journalisation
importer plotly.graph_objs au fur et à mesure
importer plotly.express au format px
importer dash_core_components en tant que dcc
importer dash_html_components au format html
importer dash_bootstrap_components en tant que dbc
à partir de dash.dependencies import Input, Sortir, État
importer optimiser_prix
importer optimiser_quantité
importer dash_daq en tant que daq

Paso 2: Concevoir la mise en page:

Nous divisons la conception en 4 sections côte à côte comme nous l'avons vu dans l'instantané d'introduction.

  1. Les contrôles / des champs, a savoir, le curseur pour sélectionner maximum et minimum, bouton radio pour sélectionner Prix ​​ou quantité optimiser, saisie de texte à configurer coûts fixes.
  2. Un graphique pour visualiser la relation entre Prix ​​Vs Quantité
  3. Un graphique pour visualiser revenu optimal
  4. Une table qui a données simulées

Voici le code de l'interface utilisateur pour générer un curseur de plage.

html.Div(
	nom_classe="rembourrage-top-bot",
	enfants =[
		html.H6("GAMME D'OPTIMISATION"),
		html.Div(
			id='output-container-range-slider'),
		dcc.RangeSlider(
			id='my-range-slider',
			min = 0,
			max=500,
			étape=1,
			marques={
				0: '0',
				500: '500'
			},
			valeur=[200, 400]
		),
	],
),

Il sera très utile d'afficher les valeurs maximales et minimales sélectionnées par l'utilisateur et nous pouvons y parvenir avec une fonction de rappel.

@app.callback(
    tiret.dépendances.sortie('output-container-range-slider', 'enfants'),
    [tiret.dépendances.entrée('my-range-slider', 'valeur')])
def update_output(valeur):
    revenir "{}".format(valeur)

De la même manière, nous allons ajouter deux autres contrôles. prière de se référer à app.py pour le code complet.

Paso 3: Pour construire l'interactivité entre les contrôles et les images, nous définissons les entrées et sorties, c'est-à-dire, pour chaque modification des saisies effectuée par l'utilisateur, quelles sont les sorties qui doivent être mises à jour. Dans notre cas, nous devons mettre à jour deux graphiques en courbes et un tableau.

@app.callback(
    [
        Sortir("carte de chaleur", 'Les données'),
        Sortir("lineChart1", 'chiffre'),
        Sortir("lineChart2", 'chiffre'),
        Sortir("id-insights", 'enfants'), 
    ],
    [
        Saisir("choisi-var-opt", "valeur"),
        Saisir("mon-range-curseur", "valeur"),
        Saisir("choisi-coût-opt", "valeur")
    ])

Paso 4: Nous définissons un une fonction update_output_All () qui prend les commandes comme entrées, exécuter la logique, ce qui signifie qu'il a généré les images et la table de données, à renseigner dans l'interface utilisateur.

def update_output_All(var_opt, var_range, var_coût):
    essayer:
        si var_opt == 'prix':
            res, fig_PriceVsRevenue, fig_PriceVsQuantity, opt_Prix, opt_Revenue = Python.optimize_price.fun_optimize(
                var_opt, var_range, var_coût, df)
            res = np.rond(res.sort_values(
                'Revenu', ascendant=Faux), décimales=2)
            si opt_Revenue > 0:
                revenir [res.to_dict('enregistrements'), fig_PriceVsRevenue, fig_PriceVsQuantity, 
                    f'Le revenu maximum de {opt_Revenu} est obtenu en optimisant {var_opt} de {opt_Prix}, coût fixe de {var_coût} et l'optimisation a été effectuée pour {var_opt} gamme entre {var_range}']
        ..................................
        ..................................
    sauf exception comme e:
        logging.exception(« Quelque chose s'est mal passé avec la logique d'interaction:', e)

prière de se référer à app.py pour le code complet.

recommandations: Bien que nous créions une application très basique avec un minimum de champs et de visuels, nous devons encore vérifier la sélection d'entrée, observer les modèles, identifier les points de revenu maximum et tirer des conclusions. Sería bueno agregar recomendaciones donde la aplicación nos diga si estamos obteniendo ganancias o pérdidas y también nos informe de los paramètres seleccionados.

Logramos esto construyendo dinámicamente una cadena y llenando los signets de posición con valores durante el tiempo de ejecución. Voici l'exemple de chaîne de retour de notre fonction de rappel

f'Le revenu maximum de {opt_Revenu} est obtenu en optimisant {var_opt} de {opt_Prix}, coût fixe de {var_coût} et l'optimisation a été effectuée pour {var_opt} gamme entre {var_range}']

Voici le résultat de l'exemple de recommandation:

76105recommandations-9790720

“Le prix est vraiment assez simple … Les clients ne paieront littéralement pas un centime de plus que la valeur réelle du produit”. – Ron Johnson

Points clés à retenir:

Comme vous l'aurez remarqué, La création d'une application de données basée sur un modèle comporte plusieurs étapes et chacune de ces étapes comporte son propre ensemble de défis..

Qualité des données: L'efficacité du modèle ML dépend de la qualité des données. Donc, il est important de tester les données pour tout écart (dérive des données) de la norme attendue. Un processus de contrôle qualité automatisé permet d'identifier toute anomalie dans les données et des étapes de pré-traitement appropriées doivent être appliquées pour rectifier l'écart..

Construction du modèle: Un modèle, qu'il soit simple ou complexe, doit être testé, validé et testé avant d'être poussé pour une utilisation en production. Les performances du modèle en production doivent être surveillées, par exemple: taille du modèle, temps de réponse du modèle, précision, etc.

Déploiement: Le modèle est généralement implémenté comme un service que l'application consomme. et il doit y avoir une intégration transparente de divers composants, sources de données et autres systèmes. Beaucoup de fois, les modèles sont différents pour chaque région en fonction de la demande de cette géographie, et cela se traduit par plusieurs modèles, données de modèle et pipelines.

Suivi du modèle *: Comme tout autre système, les modèles mis en œuvre doivent également être surveillés pour détecter les écarts (écart du modèle). Les modèles sont recyclés et déployés à une fréquence définie, qui peut être hebdomadaire, mensuel ou trimestriel, selon la nature du produit / service et impact commercial.

Noter: La mise en œuvre du modèle n'a pas été couverte dans le cadre de ce blog. Je vais planifier un blog séparé dédié au déploiement d'applications.

Note de clôture:

L'objectif du blog était de présenter une approche très simpliste de l'optimisation des prix et de créer une application Web pouvant aider les utilisateurs professionnels à prendre des décisions en déplacement.. Nous abordons également divers aspects de la création d'une application de données, de l'exploration des données à la modélisation et les défis associés à la construction., mise en œuvre et maintenance de ladite application.

  • Cette configuration de projet peut être utilisée comme modèle pour la répliquer rapidement pour d'autres cas d'utilisation.
  • puede construir un modelo más complejo para optimizar cualquier variable de su interés.
  • Conecte la aplicación a una base de données y cree operaciones CRUD en la aplicación.

j'espère que vous avez aimé le blog. Bon apprentissage !!!!

Vous pouvez vous connecter avec moi – Linkedin

Vous pouvez trouver le code pour référence: Github

Référence:

https://dash.plotly.com/

https://dash.plotly.com/dash-daq

https://unsplash.com/

Les médias présentés dans cet article ne sont pas la propriété de DataPeaker et sont utilisés à la discrétion de l'auteur.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.