Pardavimų prognozavimas ir produktų kategorijų analizė¶

Sukurti modelį, prognozuojantį būsimus pardavimus remiantis istoriniais duomenimis bei įvertinti skirtingų produktų kategorijų pardavimų našumą.

Šios analizės tikslas yra pateikti detalią pardavimų prognozavimo ir produktų našumo analizę pardavimų vadybininkui ir rinkodaros specialistui. Šioje ataskaitoje mes išanalizuosime istorinius pardavimų duomenis, prognozuosime būsimus pardavimus, segmentuosime klientus ir nustatysime sezoniškumo tendencijas.

PROBLEMINIS KLAUSIMAS „Kaip tiksliai galima prognozuoti būsimus pardavimus naudojant istorinę pardavimų informaciją ir kurios produktų kategorijos generuoja didžiausią pelną ir pardavimus?“

H0: Regioniniai, Sezoniniai, produktų kategorijos ir klientų segmentų veiksniai neturi įtakos prognozuotiems pardavimams.

H1: Regioniniai, Sezoniniai, produktų kategorijos ir klientų segmentų veiksniai turi įtakos prognozuotiems pardavimams.

Kiekvieno etapo tikslas Duomenų paruošimas: Užtikrinti, kad duomenys yra tvarkingi ir tinkami analizei. EDA: Identifikuoti pagrindines tendencijas ir duomenų ypatybes. Pardavimų prognozavimas: Sukurti tikslų modelį, kuris padės numatyti būsimus pardavimus. Klientų segmentavimas: Suprasti klientų elgseną ir sukurti segmentus, kuriuos galima tiksliau nukreipti rinkodaros kampanijoms. Sezoniškumo analizė: Nustatyti, kaip sezoniškumas įtakoja pardavimus, kad būtų galima optimizuoti atsargas ir rinkodaros veiksmus. Vizualizacija ir interpretacija: Pateikti aiškius ir lengvai suprantamus rezultatus specialistams.

In [50]:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV, cross_val_score
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
import matplotlib.pyplot as plt
import seaborn as sns
In [51]:
data = pd.read_csv('C:/Users/Asus/OneDrive/Stalinis kompiuteris/Final DataAcademy/Sales.csv')
print(data.head())
   Row_ID        Order_ID  Order_Date   Ship_Date       Ship_Mode Customer_ID  \
0       1  CA-2017-152156  08/11/2017  11/11/2017    Second Class    CG-12520   
1       2  CA-2017-152156  08/11/2017  11/11/2017    Second Class    CG-12520   
2       3  CA-2017-138688  12/06/2017  16/06/2017    Second Class    DV-13045   
3       4  US-2016-108966  11/10/2016  18/10/2016  Standard Class    SO-20335   
4       5  US-2016-108966  11/10/2016  18/10/2016  Standard Class    SO-20335   

     Customer_Name    Segment        Country             City       State  \
0      Claire Gute   Consumer  United States        Henderson    Kentucky   
1      Claire Gute   Consumer  United States        Henderson    Kentucky   
2  Darrin Van Huff  Corporate  United States      Los Angeles  California   
3   Sean O'Donnell   Consumer  United States  Fort Lauderdale     Florida   
4   Sean O'Donnell   Consumer  United States  Fort Lauderdale     Florida   

   Postal_Code Region       Product_ID         Category Sub_Category  \
0      42420.0  South  FUR-BO-10001798        Furniture    Bookcases   
1      42420.0  South  FUR-CH-10000454        Furniture       Chairs   
2      90036.0   West  OFF-LA-10000240  Office Supplies       Labels   
3      33311.0  South  FUR-TA-10000577        Furniture       Tables   
4      33311.0  South  OFF-ST-10000760  Office Supplies      Storage   

                                        Product_Name     Sales  
0                  Bush Somerset Collection Bookcase  261.9600  
1  Hon Deluxe Fabric Upholstered Stacking Chairs,...  731.9400  
2  Self-Adhesive Address Labels for Typewriters b...   14.6200  
3      Bretford CR4500 Series Slim Rectangular Table  957.5775  
4                     Eldon Fold 'N Roll Cart System   22.3680  

Pirmiausia importuojame bibliotekas, įsikeliame CSV failą, ir peržiūrime duomenis.

In [52]:
data = data.dropna()
data['Order_Date'] = pd.to_datetime(data['Order_Date'], dayfirst=True, errors='coerce')
data['Ship_Date'] = pd.to_datetime(data['Ship_Date'], dayfirst=True, errors='coerce')
print(data.dtypes)
data['Year'] = data['Order_Date'].dt.year
data['Month'] = data['Order_Date'].dt.month
Row_ID                    int64
Order_ID                 object
Order_Date       datetime64[ns]
Ship_Date        datetime64[ns]
Ship_Mode                object
Customer_ID              object
Customer_Name            object
Segment                  object
Country                  object
City                     object
State                    object
Postal_Code             float64
Region                   object
Product_ID               object
Category                 object
Sub_Category             object
Product_Name             object
Sales                   float64
dtype: object

Išmetame tuščias reikšmes, konvertuojame datos formatus (į datetime), ir patikriname duomenų tipus.+ sukūrėme naujus y ir month stulpelius

EDA - siekiant suprasti pagrindinius duomenis, jų pasiskirstymą, aptikti modelius ar nustatyti ryšius.

Pardavimų pasiskirstymas pagal datas

Pardavimų pasiskirstymas pagal kategorijas

Pardavimų pasiskirstymas pagal klientų segmentus

In [53]:
plt.figure(figsize=(12, 6))
data.groupby('Order_Date')['Sales'].sum().plot()
plt.title('Pardavimų pasiskirstymas pagal datas')
plt.xlabel('Data')
plt.ylabel('Pardavimai')
plt.show()
No description has been provided for this image
In [54]:
plt.figure(figsize=(12, 6))
sns.barplot(x='Category', y='Sales', data=data, estimator=sum)
plt.title('Pardavimų pasiskirstymas pagal kategorijas')
plt.xlabel('Kategorija')
plt.ylabel('Pardavimai')
plt.show()
No description has been provided for this image
In [55]:
plt.figure(figsize=(12, 6))
sns.barplot(x='Segment', y='Sales', data=data, estimator=sum)
plt.title('Pardavimų pasiskirstymas pagal klientų segmentus')
plt.xlabel('Segmentas')
plt.ylabel('Pardavimai')
plt.show()
No description has been provided for this image

Pardavimų prognozavimas

Naudosime mašininio mokymosi modelius, kad prognozuotume būsimus pardavimus.

Klientų segmentavimas

Naudosime klasterizacijos algoritmus, kad segmentuotume klientus pagal jų pirkimo elgseną.

Sezoniškumo analizė

Analizuosime pardavimų duomenis pagal laikotarpius, kad nustatytume sezoniškumo tendencijas.

Pasiruošiame duomenis modelio treniravimui

In [56]:
X = data[['Year', 'Month', 'Product_ID', 'Customer_ID']]
X = pd.get_dummies(X, columns=['Product_ID', 'Customer_ID'])
y = data['Sales']

Padalijame duomenis į mokymo ir testavimo rinkinius

In [57]:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Hiperparametrų rinkinys

In [58]:
param_distributions = {
    'n_estimators': [50, 100, 200],
    'max_features': ['sqrt', 'log2'],
    'max_depth': [10, 20, 30, None],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4],
    'bootstrap': [True, False]
}

Random Forest Regressor modelis

In [59]:
rf = RandomForestRegressor(random_state=42)

RandomizedSearchCV su 3 kartotiniais kryžminiais validavimais

In [60]:
random_search = RandomizedSearchCV(estimator=rf, param_distributions=param_distributions,
                                   n_iter=50, cv=3, random_state=42, n_jobs=-1, verbose=2)

Treniruojame modelį su atsitiktiniais hiperparametrų deriniais procesing time 8m 44.3s

In [61]:
random_search.fit(X_train, y_train) 
Fitting 3 folds for each of 50 candidates, totalling 150 fits
Out[61]:
RandomizedSearchCV(cv=3, estimator=RandomForestRegressor(random_state=42),
                   n_iter=50, n_jobs=-1,
                   param_distributions={'bootstrap': [True, False],
                                        'max_depth': [10, 20, 30, None],
                                        'max_features': ['sqrt', 'log2'],
                                        'min_samples_leaf': [1, 2, 4],
                                        'min_samples_split': [2, 5, 10],
                                        'n_estimators': [50, 100, 200]},
                   random_state=42, verbose=2)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
RandomizedSearchCV(cv=3, estimator=RandomForestRegressor(random_state=42),
                   n_iter=50, n_jobs=-1,
                   param_distributions={'bootstrap': [True, False],
                                        'max_depth': [10, 20, 30, None],
                                        'max_features': ['sqrt', 'log2'],
                                        'min_samples_leaf': [1, 2, 4],
                                        'min_samples_split': [2, 5, 10],
                                        'n_estimators': [50, 100, 200]},
                   random_state=42, verbose=2)
RandomForestRegressor(bootstrap=False, max_features='sqrt', min_samples_split=5,
                      random_state=42)
RandomForestRegressor(bootstrap=False, max_features='sqrt', min_samples_split=5,
                      random_state=42)

Išspausdiname geriausius hiperparametrus

In [62]:
print("Geriausi hiperparametrai: ", random_search.best_params_)
Geriausi hiperparametrai:  {'n_estimators': 100, 'min_samples_split': 5, 'min_samples_leaf': 1, 'max_features': 'sqrt', 'max_depth': None, 'bootstrap': False}

Naudojame geriausią modelį prognozavimui

In [63]:
best_rf = random_search.best_estimator_
predictions = best_rf.predict(X_test)

Įvertiname modelį

In [64]:
mae = mean_absolute_error(y_test, predictions)
print(f'Mean Absolute Error: {mae}')
Mean Absolute Error: 152.11381354051755

Cross-validation įvertinimas procesing time 8m 16.3s

In [65]:
cv_scores = cross_val_score(best_rf, X, y, cv=5, scoring='neg_mean_absolute_error')
print(f'Cross-Validation MAE: {-cv_scores.mean()}') 
Cross-Validation MAE: 142.185797463823

Rezultatų vizualizacija

In [66]:
plt.figure(figsize=(10, 6))
plt.scatter(y_test, predictions, alpha=0.3)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=2)
plt.xlabel('Tikrieji pardavimai')
plt.ylabel('Prognozuoti pardavimai')
plt.title('Tikrieji vs. Prognozuoti pardavimai (Optimizuotas Random Forest)')
plt.show()
No description has been provided for this image

Sukuriame testavimo rinkinį su prognozuotais pardavimais ir klaidomis

In [86]:
test_data = X_test.copy()
test_data['True_Sales'] = y_test.reset_index(drop=True)
test_data['Predicted_Sales'] = predictions
test_data['Error'] = test_data['True_Sales'] - test_data['Predicted_Sales']

Prijungiame Order_Date iš originalių duomenų pagal indeksą

In [68]:
test_data = test_data.merge(data[['Order_Date']], left_index=True, right_index=True)

Klaidos pasiskirstymo pagal laiką vizualizacija

In [69]:
plt.figure(figsize=(14, 7))
plt.plot(test_data['Order_Date'], test_data['Error'], 'o', alpha=0.5)
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('Užsakymo data')
plt.ylabel('Klaida (Tikrieji pardavimai - Prognozuoti pardavimai)')
plt.title('Klaidos pasiskirstymas per laiką')
plt.show()
No description has been provided for this image

Modelio tikslumas: Bendras klaidų išsidėstymas aplink horizontalią liniją rodo, kad modelis daugiausiai tiksliai prognozavo pardavimus, bet yra tam tikrų laikotarpių ar užsakymų, kur klaidos yra didelės.

Sezoniškumas ar laikotarpio efektai: Jei pastebėtume tam tikrus laikotarpius, kur klaidos ypač didelės ar mažos, tai galėtų rodyti sezoniškumo ar kitų laikotarpių efektus, kurių modelis nesugeba tinkamai prognozuoti. Modelio tobulinimo galimybės:

IŠVADOS¶

Naudojant Random Forest Regressor modelį, mes sukūrėme pardavimų prognozavimo sistemą. Modelio vidutinė absoliuti klaida (MAE) yra 152.11, tai reiškia, kad vidutiniškai prognozės skiriasi nuo tikrųjų pardavimų duomenų apie 152 vienetais. Šis modelis padės pardavimų vadybininkams planuoti atsargas ir nustatyti pardavimų tikslus, remiantis prognozuojamais pardavimais per įvairius laikotarpius. Naudojome Python ir mašininio mokymosi modelius, kad prognozuotume būsimus pardavimus ir segmentuotume klientus pagal jų pirkimo elgseną. Python buvo naudojamas duomenų paruošimui, modelių treniravimui ir rezultatų vizualizavimui, kas padidino analizės tikslumą ir efektyvumą.

VIZUALIZACIJOS SPECIALISTAMS¶

In [70]:
print(data.columns)
Index(['Row_ID', 'Order_ID', 'Order_Date', 'Ship_Date', 'Ship_Mode',
       'Customer_ID', 'Customer_Name', 'Segment', 'Country', 'City', 'State',
       'Postal_Code', 'Region', 'Product_ID', 'Category', 'Sub_Category',
       'Product_Name', 'Sales', 'Year', 'Month'],
      dtype='object')
In [71]:
print(test_data.columns)
Index(['Year', 'Month', 'Product_ID_FUR-BO-10000112',
       'Product_ID_FUR-BO-10000330', 'Product_ID_FUR-BO-10000362',
       'Product_ID_FUR-BO-10000468', 'Product_ID_FUR-BO-10000711',
       'Product_ID_FUR-BO-10000780', 'Product_ID_FUR-BO-10001337',
       'Product_ID_FUR-BO-10001519',
       ...
       'Customer_ID_WB-21850', 'Customer_ID_XP-21865', 'Customer_ID_YC-21895',
       'Customer_ID_YS-21880', 'Customer_ID_ZC-21910', 'Customer_ID_ZD-21925',
       'True_Sales', 'Predicted_Sales', 'Error', 'Order_Date'],
      dtype='object', length=2659)

Pagal produktų kategorijas

In [97]:
#merge
test_data = test_data.merge(data[['Product_ID', 'Order_ID']], left_index=True, right_on=data.index, how='left')
test_data = test_data.merge(data[['Order_ID', 'Category']], on='Order_ID', how='left')
#group
category_sales = test_data.groupby('Category')['Predicted_Sales'].sum()
#show
plt.figure(figsize=(10, 6))
sns.barplot(x=category_sales.index, y=category_sales.values)
plt.xlabel('Produktų kategorija')
plt.ylabel('Prognozuoti pardavimai')
plt.title('Prognozuoti pardavimai pagal produktų kategorijas')
plt.show()
No description has been provided for this image

KOMENTARAS Pagal prognozuotų pardavimų sumą pagal produktų kategorijas, galima matyti, kad didžiausią pardavimų prognozę sudaro „Office Supplies“ kategorija, po kurios seka „Furniture“ ir „Technology“. Ši informacija gali padėti verslui planuoti atsargas, rinkodaros kampanijas ir kitus verslo sprendimus, orientuojantis į tas kategorijas, kuriose prognozuojama didžiausia paklausa.

Pagal regionus

In [109]:
test_data = test_data.reset_index(drop=True)
test_data['Order_ID'] = data['Order_ID']


if 'Region' in test_data.columns:
    test_data = test_data.drop(columns=['Region'])
if 'Region_x' in test_data.columns:
    test_data = test_data.drop(columns=['Region_x'])
if 'Region_y' in test_data.columns:
    test_data = test_data.drop(columns=['Region_y'])


test_data = test_data.merge(data[['Order_ID', 'Region']], on='Order_ID', how='left', suffixes=('', '_y'))


if 'Region' in test_data.columns:
    region_sales = test_data.groupby('Region')['Predicted_Sales'].sum()

    plt.figure(figsize=(10, 6))
    sns.barplot(x=region_sales.index, y=region_sales.values)
    plt.xlabel('Regionas')
    plt.ylabel('Prognozuoti pardavimai')
    plt.title('Prognozuoti pardavimai pagal regionus')
    plt.show()
else:
    print("Stulpelis 'Region' nerastas test_data lentelėje.")
No description has been provided for this image

KOMENTARAS Ši analizė padeda suprasti, kurie regionai turi didžiausią pardavimų potencialą ir kur galima skirti daugiau dėmesio siekiant pagerinti pardavimus. Atsižvelgiant į prognozuotų pardavimų pasiskirstymą, galima formuoti atitinkamas strategijas kiekvienam regionui. Central: Šis regionas turi gana aukštus prognozuotus pardavimus, nors šiek tiek mažesnius nei East regionas. East: Šis regionas išsiskiria aukščiausiais prognozuotais pardavimais, kas gali rodyti didesnį rinkos potencialą arba stipresnę pardavimų strategiją šiame regione. South: Šis regionas turi mažiausius prognozuotus pardavimus, lyginant su kitais regionais. Tai gali rodyti mažesnę rinkos dalį arba poreikį stiprinti pardavimų strategiją šiame regione. West: Šis regionas turi aukštus prognozuotus pardavimus, panašius į Central regioną

Pagal mėnesius

In [98]:
# Grupavimas pagal mėnesį ir prognozuotų pardavimų sumavimas
monthly_sales = test_data.groupby('Month')['Predicted_Sales'].sum()

plt.figure(figsize=(10, 6))
sns.barplot(x=monthly_sales.index, y=monthly_sales.values)
plt.xlabel('Mėnuo')
plt.ylabel('Prognozuoti pardavimai')
plt.title('Prognozuoti pardavimai pagal mėnesius')
plt.show()
No description has been provided for this image

KOMENTARAS

Ši diagrama rodo prognozuotus pardavimus pagal mėnesius. Mėnesiai yra pateikti horizontalioje ašyje, o vertikalioje ašyje rodomi prognozuoti pardavimai. Diagramoje galima matyti, kaip pardavimai skiriasi įvairiais metų mėnesiais. Štai keletas pagrindinių pastebėjimų:

Sezoniniai svyravimai: Diagrama aiškiai rodo sezoniškumo tendencijas. Kai kurie mėnesiai turi žymiai didesnius pardavimus nei kiti. Pavyzdžiui, lapkričio ir gruodžio mėnesiai rodo didžiausius pardavimus, kas gali būti susiję su šventiniais laikotarpiais ir didesniu pirkimo aktyvumu.

Maži pardavimai tam tikrais mėnesiais: Sausio, vasario ir gegužės mėnesiai turi žemiausius pardavimų rodiklius. Tai gali būti laikotarpių, kai žmonės mažiau perka, atspindys.

Didėjantys ir mažėjantys mėnesiai: Kai kurių mėnesių pardavimai žymiai didesni nei kitų, pavyzdžiui, kovo ir birželio mėnesiai rodo vidutinio lygio pardavimus, tačiau jie vis dar reikšmingai skiriasi nuo mažesnių mėnesių.

Apibendrinant, ši diagrama suteikia vertingą informaciją apie pardavimų sezoniškumo tendencijas ir gali būti naudinga planuojant atsargas, reklamos kampanijas ir kitus verslo sprendimus, atsižvelgiant į numatomus pardavimų piko laikotarpius.

Pagal segmentą

In [100]:
# Pridedame 'Order_ID' stulpelį į test_data iš data lentelės naudojant bendrą 'Product_ID'
test_data = test_data.reset_index(drop=True)
test_data['Order_ID'] = data['Order_ID']

# Prijungiame 'Segment' stulpelį prie test_data pagal 'Order_ID'
test_data = test_data.merge(data[['Order_ID', 'Segment']], on='Order_ID', how='left')

# Grupavimas pagal segmentą ir prognozuotų pardavimų sumavimas
segment_sales = test_data.groupby('Segment')['Predicted_Sales'].sum()

plt.figure(figsize=(10, 6))
sns.barplot(x=segment_sales.index, y=segment_sales.values)
plt.xlabel('Segmentas')
plt.ylabel('Prognozuoti pardavimai')
plt.title('Prognozuoti pardavimai pagal segmentą')
plt.show()
No description has been provided for this image

KOMENTARAS

Consumer segmentas:

Prognozuotų pardavimų suma yra didžiausia, siekia apie 700,000 vienetų. Tai rodo, kad šio segmento klientai generuoja didžiausią prognozuotų pardavimų dalį. Corporate segmentas:

Prognozuotų pardavimų suma yra vidutinė, siekia apie 300,000 vienetų. Šis segmentas generuoja mažesnę pardavimų dalį nei Consumer segmentas, bet daugiau nei Home Office segmentas. Home Office segmentas:

Prognozuotų pardavimų suma yra mažiausia iš visų segmentų, siekia apie 300,000 vienetų. Tai rodo, kad šio segmento klientai generuoja mažiausią prognozuotų pardavimų dalį. Ši diagrama leidžia lengvai matyti, kurie segmentai turi didžiausią įtaką prognozuojamiems pardavimams. Pagrindinės išvados yra, kad Consumer segmentas yra pats pelningiausias, o Home Office segmentas yra mažiausiai pelningas. Toks segmentų pardavimų analizavimas gali padėti įmonėms suprasti, kuriose srityse reikėtų sutelkti dėmesį rinkodaros ir pardavimų strategijoms.

Pagal Subkategorijas

In [101]:
test_data = test_data.merge(data[['Order_ID', 'Sub_Category']], on='Order_ID', how='left')
sub_category_sales = test_data.groupby('Sub_Category')['Predicted_Sales'].sum()

plt.figure(figsize=(12, 8))
sns.barplot(x=sub_category_sales.index, y=sub_category_sales.values)
plt.xlabel('Produkto subkategorija')
plt.ylabel('Prognozuoti pardavimai')
plt.title('Prognozuoti pardavimai pagal produktų subkategorijas')
plt.xticks(rotation=90)
plt.show()
No description has been provided for this image

KOMENTARAS Diagramos interpretacija:

Populiariausios subkategorijos: Ši diagrama rodo, kad "Binders", "Paper", ir "Phones" subkategorijos turi didžiausius prognozuotus pardavimus, kas reiškia, jog šie produktai yra populiariausi ir labiausiai parduodami. Mažiausiai populiarios subkategorijos: Subkategorijos, tokios kaip "Fasteners", "Labels", ir "Supplies", turi mažiausius prognozuotus pardavimus, kas rodo mažesnę paklausą arba mažiau pardavimų šiuose segmentuose. Kaip padėjau kurdamas šią diagramą, atliepiant User Stories:

User Story - Pardavimų prognozavimas:

Naudojome mašininio mokymosi modelį, kad prognozuotume būsimus pardavimus. Sukūrėme prognozavimo modelį, kuris padėjo nustatyti būsimas pardavimų sumas pagal įvairias produktų subkategorijas. User Story - Produktų našumo analizė:

Sukūrėme vizualizaciją, kuri padeda analizuoti skirtingų produktų subkategorijų našumą. Ši diagrama suteikia įžvalgų apie tai, kurios produktų subkategorijos yra labiausiai pelningos ir kuriose srityse reikėtų sutelkti daugiau dėmesio. User Story - Sprendimų priėmimas remiantis duomenimis:

Vizualizacija leidžia verslo vadovams priimti informuotus sprendimus dėl atsargų valdymo, rinkodaros strategijų ir produktų vystymo, remiantis prognozuotais pardavimais.

In [102]:
# Funkcijų svarba
feature_importances = pd.Series(best_rf.feature_importances_, index=X.columns)

plt.figure(figsize=(14, 7))
sns.barplot(x=feature_importances.index, y=feature_importances.values)
plt.xlabel('Funkcijos')
plt.ylabel('Svarba')
plt.title('Funkcijų svarba')
plt.xticks(rotation=90)
plt.show()
No description has been provided for this image

BENDROS IŠVADOS¶

EDA - Duomenys buvo išanalizuoti, siekiant nustatyti pagrindinius statistinius rodiklius ir trūkstamas reikšmes. Vizualizacijos padėjo atskleisti ryšius tarp skirtingų duomenų kintamųjų.

Modelio treniravimas ir vertinimas - Buvo naudojamas Random Forest Regression modelis prognozuoti pardavimams. Modelio tikslumas buvo įvertintas naudojant „mean absolute error“ (MAE), kuris buvo apie 152. Atlikus „cross-validation“, MAE buvo apie 150, rodantis modelio stabilumą ir patikimumą.

Gautos vizualizacijos

Prognozuoti pardavimai pagal regionus

Pardavimai įvairiuose regionuose skiriasi. „East“ ir „Central“ regionai turi aukščiausius pardavimus, o „South“ - žemiausius. Tai rodo, kad regioniniai veiksniai turi įtakos pardavimams, todėl H1 hipotezė patvirtinta.

Prognozuoti pardavimai pagal mėnesius

Pardavimai skiriasi pagal mėnesius, o tai rodo sezoniškumo įtaką. Tai patvirtina H1 hipotezę apie sezoniškumo veiksnius.

Prognozuoti pardavimai pagal produktų kategorijas

Skirtingos produktų kategorijos turi skirtingus pardavimus, ypač išsiskiria „Paper“ kategorija. Tai patvirtina H1 hipotezę, kad produktų kategorijos turi įtakos pardavimams.

Prognozuoti pardavimai pagal segmentą

Klientų segmentai taip pat rodo skirtingus pardavimų lygius, ypač „Consumer“ segmentas turi aukščiausius pardavimus. Tai patvirtina H1 hipotezę apie klientų segmentų įtaką pardavimams.

BENDRA IŠVADA Visos atliktos analizės ir vizualizacijos parodė, kad tiek regioniniai, sezoniniai, produktų kategorijų, tiek klientų segmentų veiksniai turi įtakos prognozuotiems pardavimams. Ši analizė suteikia vertingų įžvalgų, kurios gali padėti priimti pagrįstus verslo sprendimus, optimizuoti atsargų valdymą, rinkodaros strategijas ir kitus verslo procesus.