Βελτιστοποίηση λιανικής τιμής με χρήση Python

Βελτιστοποίηση λιανικής τιμής με χρήση Python

April 17, 2023 0 By admin

Η βελτιστοποίηση λιανικής τιμής περιλαμβάνει τον καθορισμό της βέλτιστης τιμής πώλησης για προϊόντα ή υπηρεσίες για τη μεγιστοποίηση των εσόδων και του κέρδους. Έτσι, αν θέλετε να μάθετε πώς να χρησιμοποιείτε μηχανική μάθηση για την εργασία βελτιστοποίησης λιανικής τιμής, αυτό το άρθρο είναι για εσάς. Σε αυτό το άρθρο, θα σας καθοδηγήσω στην εργασία της βελτιστοποίησης λιανικής τιμής με τη μηχανική εκμάθηση χρησιμοποιώντας Python.

Τι είναι η Βελτιστοποίηση Λιανικής Τιμής;

Η βελτιστοποίηση των τιμών λιανικής σημαίνει την εύρεση της τέλειας ισορροπίας μεταξύ της τιμής που χρεώνετε για τα προϊόντα σας και του αριθμού των προϊόντων που μπορείτε να πουλήσετε σε αυτήν την τιμή.

Ο απώτερος στόχος είναι να χρεώσετε μια τιμή που θα σας βοηθήσει να κερδίσετε τα περισσότερα χρήματα και θα προσελκύσει αρκετούς πελάτες για να αγοράσουν τα προϊόντα σας. Περιλαμβάνει τη χρήση δεδομένων και στρατηγικών τιμολόγησης για να βρείτε τη σωστή τιμή που μεγιστοποιεί τις πωλήσεις και τα κέρδη σας, διατηρώντας παράλληλα τους πελάτες ευχαριστημένους.

Έτσι, για το έργο της Βελτιστοποίησης Τιμών Λιανικής, χρειάζεστε δεδομένα σχετικά με τις τιμές προϊόντων ή υπηρεσιών και όλα όσα επηρεάζουν την τιμή ενός προϊόντος. Βρήκα ένα ιδανικό σύνολο δεδομένων για αυτήν την εργασία. Μπορείτε να κάνετε λήψη των δεδομένων από εδώ.

Στην παρακάτω ενότητα, θα σας καθοδηγήσω στην εργασία της βελτιστοποίησης λιανικής τιμής με τη μηχανική εκμάθηση χρησιμοποιώντας Python.

Βελτιστοποίηση λιανικής τιμής με χρήση Python

Ας ξεκινήσουμε το έργο του Retail Price Optimization εισάγοντας τις απαραίτητες βιβλιοθήκες Python και το σύνολο δεδομένων:

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
pio.templates.default = "plotly_white"

data = pd.read_csv('retail_price.csv')
print(data.head())
  product_id product_category_name  month_year  qty  total_price  \
0       bed1        bed_bath_table  01-05-2017    1        45.95   
1       bed1        bed_bath_table  01-06-2017    3       137.85   
2       bed1        bed_bath_table  01-07-2017    6       275.70   
3       bed1        bed_bath_table  01-08-2017    4       183.80   
4       bed1        bed_bath_table  01-09-2017    2        91.90   

   freight_price  unit_price  product_name_lenght  product_description_lenght  \
0      15.100000       45.95                   39                         161   
1      12.933333       45.95                   39                         161   
2      14.840000       45.95                   39                         161   
3      14.287500       45.95                   39                         161   
4      15.100000       45.95                   39                         161   

   product_photos_qty  ...  comp_1  ps1        fp1      comp_2  ps2  \
0                   2  ...    89.9  3.9  15.011897  215.000000  4.4   
1                   2  ...    89.9  3.9  14.769216  209.000000  4.4   
2                   2  ...    89.9  3.9  13.993833  205.000000  4.4   
3                   2  ...    89.9  3.9  14.656757  199.509804  4.4   
4                   2  ...    89.9  3.9  18.776522  163.398710  4.4   

         fp2  comp_3  ps3        fp3  lag_price  
0   8.760000   45.95  4.0  15.100000      45.90  
1  21.322000   45.95  4.0  12.933333      45.95  
2  22.195932   45.95  4.0  14.840000      45.95  
3  19.412885   45.95  4.0  14.287500      45.95  
4  24.324687   45.95  4.0  15.100000      45.95  

[5 rows x 30 columns]

Πριν προχωρήσουμε, ας ρίξουμε μια ματιά αν τα δεδομένα έχουν μηδενικές τιμές ή όχι:

print(data.isnull().sum())
product_id                    0
product_category_name         0
month_year                    0
qty                           0
total_price                   0
freight_price                 0
unit_price                    0
product_name_lenght           0
product_description_lenght    0
product_photos_qty            0
product_weight_g              0
product_score                 0
customers                     0
weekday                       0
weekend                       0
holiday                       0
month                         0
year                          0
s                             0
volume                        0
comp_1                        0
ps1                           0
fp1                           0
comp_2                        0
ps2                           0
fp2                           0
comp_3                        0
ps3                           0
fp3                           0
lag_price                     0
dtype: int64

Τώρα ας ρίξουμε μια ματιά στα περιγραφικά στατιστικά στοιχεία των δεδομένων:

              qty   total_price  freight_price  unit_price  \
count  676.000000    676.000000     676.000000  676.000000   
mean    14.495562   1422.708728      20.682270  106.496800   
std     15.443421   1700.123100      10.081817   76.182972   
min      1.000000     19.900000       0.000000   19.900000   
25%      4.000000    333.700000      14.761912   53.900000   
50%     10.000000    807.890000      17.518472   89.900000   
75%     18.000000   1887.322500      22.713558  129.990000   
max    122.000000  12095.000000      79.760000  364.000000   
product_name_lenght  product_description_lenght  product_photos_qty  \
count           676.000000                  676.000000          676.000000   
mean             48.720414                  767.399408            1.994083   
std               9.420715                  655.205015            1.420473   
min              29.000000                  100.000000            1.000000   
25%              40.000000                  339.000000            1.000000   
50%              51.000000                  501.000000            1.500000   
75%              57.000000                  903.000000            2.000000   
max              60.000000                 3006.000000            8.000000   
product_weight_g  product_score   customers  ...      comp_1  \
count        676.000000     676.000000  676.000000  ...  676.000000   
mean        1847.498521       4.085503   81.028107  ...   79.452054   
std         2274.808483       0.232021   62.055560  ...   47.933358   
min          100.000000       3.300000    1.000000  ...   19.900000   
25%          348.000000       3.900000   34.000000  ...   49.910000   
50%          950.000000       4.100000   62.000000  ...   69.900000   
75%         1850.000000       4.200000  116.000000  ...  104.256549   
max         9750.000000       4.500000  339.000000  ...  349.900000   
ps1         fp1      comp_2         ps2         fp2      comp_3  \
count  676.000000  676.000000  676.000000  676.000000  676.000000  676.000000   
mean     4.159467   18.597610   92.930079    4.123521   18.620644   84.182642   
std      0.121652    9.406537   49.481269    0.207189    6.424174   47.745789   
min      3.700000    0.095439   19.900000    3.300000    4.410000   19.900000   
25%      4.100000   13.826429   53.900000    4.100000   14.485000   53.785714   
50%      4.200000   16.618984   89.990000    4.200000   16.811765   59.900000   
75%      4.200000   19.732500  117.888889    4.200000   21.665238   99.990000   
max      4.500000   57.230000  349.900000    4.400000   57.230000  255.610000   
ps3         fp3   lag_price  
count  676.000000  676.000000  676.000000  
mean     4.002071   17.965007  107.399684  
std      0.233292    5.533256   76.974657  
min      3.500000    7.670000   19.850000  
25%      3.900000   15.042727   55.668750  
50%      4.000000   16.517110   89.900000  
75%      4.100000   19.447778  129.990000  
max      4.400000   57.230000  364.000000  
[8 rows x 27 columns]

Ας δούμε τώρα την κατανομή των τιμών των προϊόντων:

fig = px.histogram(data, 
x='total_price', 
nbins=20, 
title="Distribution of Total Price")
fig.show()
Βελτιστοποίηση λιανικής τιμής: Κατανομή Συνολικής Τιμής

Τώρα ας ρίξουμε μια ματιά στην κατανομή των τιμών μονάδας χρησιμοποιώντας ένα οικόπεδο κουτιού:

fig = px.box(data, 
y='unit_price', 
title="Box Plot of Unit Price")
fig.show()
Κουτί Οικόπεδο Τιμών Μονάδας

Τώρα ας ρίξουμε μια ματιά στη σχέση μεταξύ ποσότητας και συνολικών τιμών:

fig = px.scatter(data, 
x='qty', 
y='total_price', 
title="Quantity vs Total Price", trendline="ols")
fig.show()
Βελτιστοποίηση λιανικής τιμής: Ποσότητα έναντι Συνολικής Τιμής

Έτσι, η σχέση μεταξύ ποσότητας και συνολικών τιμών είναι γραμμική. Δείχνει ότι η δομή της τιμής βασίζεται σε μια σταθερή τιμή μονάδας, όπου η συνολική τιμή υπολογίζεται πολλαπλασιάζοντας την ποσότητα με την τιμή μονάδας.

Τώρα ας ρίξουμε μια ματιά στις μέσες συνολικές τιμές ανά κατηγορίες προϊόντων:

fig = px.bar(data, x='product_category_name', 
y='total_price', 
title="Average Total Price by Product Category")
fig.show()
Μέσες συνολικές τιμές ανά κατηγορία προϊόντων

Τώρα ας ρίξουμε μια ματιά στην κατανομή των συνολικών τιμών ανά ημέρα της εβδομάδας χρησιμοποιώντας ένα οικόπεδο κουτιού:

fig = px.box(data, x='weekday', 
y='total_price', 
title="Box Plot of Total Price by Weekday")
fig.show()
Βελτιστοποίηση λιανικής τιμής: Οικόπεδο σε κουτί συνολικής τιμής ανά ημέρα

Τώρα ας ρίξουμε μια ματιά στην κατανομή των συνολικών τιμών ανά αργία χρησιμοποιώντας ένα οικόπεδο κουτιού:

fig = px.box(data, x='holiday', 
y='total_price', 
title="Box Plot of Total Price by Holiday")
fig.show()
Οικόπεδο Box Συνολικών Τιμών ανά Διακοπές

Τώρα ας ρίξουμε μια ματιά στη συσχέτιση μεταξύ των αριθμητικών χαρακτηριστικών μεταξύ τους:

correlation_matrix = data.corr()
fig = go.Figure(go.Heatmap(x=correlation_matrix.columns, 
y=correlation_matrix.columns, 
z=correlation_matrix.values))
fig.update_layout(title="Correlation Heatmap of Numerical Features")
fig.show()
Βελτιστοποίηση λιανικής τιμής: Χάρτης θερμότητας συσχέτισης αριθμητικών χαρακτηριστικών

Η ανάλυση των στρατηγικών τιμολόγησης των ανταγωνιστών είναι απαραίτητη για τη βελτιστοποίηση των τιμών λιανικής. Η παρακολούθηση και η συγκριτική αξιολόγηση έναντι των τιμών των ανταγωνιστών μπορούν να βοηθήσουν στον εντοπισμό ευκαιριών για ανταγωνιστικές τιμές, είτε με τιμολόγηση κάτω ή πάνω από τον ανταγωνισμό, ανάλογα με τη θέση και τη στρατηγική του λιανοπωλητή. Τώρα ας υπολογίσουμε τη μέση διαφορά τιμής ανταγωνιστή ανά κατηγορία προϊόντος:

data['comp_price_diff'] = data['unit_price'] - data['comp_1'] 
avg_price_diff_by_category = data.groupby('product_category_name')['comp_price_diff'].mean().reset_index()
fig = px.bar(avg_price_diff_by_category, 
x='product_category_name', 
y='comp_price_diff', 
title="Average Competitor Price Difference by Product Category")
fig.update_layout(
xaxis_title="Product Category",
yaxis_title="Average Competitor Price Difference"
)
fig.show()
Μέση Διαφορά Τιμών Ανταγωνιστή ανά Κατηγορία Προϊόντος

Μοντέλο βελτιστοποίησης λιανικής τιμής με μηχανική μάθηση

Τώρα ας εκπαιδεύσουμε ένα μοντέλο Μηχανικής Εκμάθησης για το έργο της Βελτιστοποίησης Τιμών Λιανικής. Παρακάτω είναι πώς μπορούμε να εκπαιδεύσουμε ένα μοντέλο Μηχανικής Μάθησης για αυτό το πρόβλημα:

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error
X = data[['qty', 'unit_price', 'comp_1', 
'product_score', 'comp_price_diff']]
y = data['total_price']
X_train, X_test, y_train, y_test = train_test_split(X, y, 
test_size=0.2,
random_state=42)
# Train a linear regression model
model = DecisionTreeRegressor()
model.fit(X_train, y_train)

Ας κάνουμε τώρα προβλέψεις και ας ρίξουμε μια ματιά στις προβλεπόμενες τιμές λιανικής και τις πραγματικές τιμές λιανικής:

y_pred = model.predict(X_test)
fig = go.Figure()
fig.add_trace(go.Scatter(x=y_test, y=y_pred, mode="markers", 
marker=dict(color="blue"), 
name="Predicted vs. Actual Retail Price"))
fig.add_trace(go.Scatter(x=[min(y_test), max(y_test)], y=[min(y_test), max(y_test)], 
mode="lines", 
marker=dict(color="red"), 
name="Ideal Prediction"))
fig.update_layout(
title="Predicted vs. Actual Retail Price",
xaxis_title="Actual Retail Price",
yaxis_title="Predicted Retail Price"
)
fig.show()
Προβλεπόμενη έναντι Πραγματικής Λιανικής Τιμής

Έτσι, μπορείτε να βελτιστοποιήσετε τις τιμές λιανικής με τη Μηχανική Εκμάθηση χρησιμοποιώντας Python.

Περίληψη

Ο απώτερος στόχος της βελτιστοποίησης των τιμών λιανικής είναι η χρέωση μιας τιμής που σας βοηθά να κερδίσετε τα περισσότερα χρήματα και να προσελκύσετε αρκετούς πελάτες για να αγοράσουν τα προϊόντα σας. Περιλαμβάνει τη χρήση δεδομένων και στρατηγικών τιμολόγησης για να βρείτε τη σωστή τιμή που μεγιστοποιεί τις πωλήσεις και τα κέρδη σας, διατηρώντας παράλληλα τους πελάτες ευχαριστημένους. Ελπίζω να σας άρεσε αυτό το άρθρο σχετικά με τη βελτιστοποίηση των τιμών λιανικής με τη Μηχανική Μάθηση με χρήση Python. Μη διστάσετε να κάνετε πολύτιμες ερωτήσεις στην παρακάτω ενότητα σχολίων.