Vývoj, vyhodnotenie a skóre forecasting model pre predaj supermarket
Tento kurz predstavuje komplexný príklad pracovného postupu synapse Data Science v službe Microsoft Fabric. Scenár vytvára model prognózy, ktorý používa historické údaje o predaji na predpovedanie predaja kategórie produktov v supermarkete.
Predpovedanie je rozhodujúcim prvkom v predaji. Kombinuje historické údaje a prediktívne metódy, vďaka čomu poskytuje prehľad o budúcich trendoch. Prognózovanie môže analyzovať minulý predaj na identifikáciu vzorov a učenie sa zo správania spotrebiteľov s cieľom optimalizovať stratégie zásob, výroby a marketingu. Tento proaktívny prístup zlepšuje prispôsobivosť, odozvu a celkový výkon podnikov v dynamickej službe Marketplace.
V tomto kurze sú obsiahnuté tieto kroky:
- Načítanie údajov
- Použitie prieskumnej analýzy údajov na pochopenie a spracovanie údajov
- Trénovanie modelu strojového učenia pomocou balíka softvéru open-source a sledovanie experimentov s tokom MLflow a funkciou automatického označovania služby Fabric
- Uloženie konečného modelu strojového učenia a vytváranie predpovedí
- Zobrazenie výkonu modelu pomocou vizualizácií Power BI
Predpoklady
Získajte predplatné služby Microsoft Fabric . Alebo si zaregistrujte bezplatnú skúšobnú služby Microsoft Fabric.
Prihláste sa do služby Microsoft Fabric.
Pomocou prepínača skúseností v ľavej dolnej časti domovskej stránky sa prepnete na službu Fabric.
- Ak je to potrebné, vytvorte si podľa popisu v téme Vytvorenie jazera v službe Microsoft Fabric.
Sledovanie v poznámkovom bloke
Môžete si vybrať jednu z týchto možností, ktorú si môžete vyskúšať v notebooku:
- Otvorenie a spustenie vstavaného notebooku v prostredí Synapse Data Science
- Nahratie notebooku z GitHubu do prostredia synapse Data Science
Otvorenie vstavaného poznámkového bloku
Tento kurz sprevádza ukážkový poznámkový blok prognózovanie predaja.
Ak chcete otvoriť vzorový poznámkový blok pre tento kurz, postupujte podľa pokynov v téme Príprava systému na kurzy dátovej vedy.
Uistite sa, že pripojiť lakehouse na notebook, ako začnete bežať kód.
Importovanie notebooku z GitHubu
Tento kurz sprevádza AIsample - Superstore Forecast.ipynb notebook.
Ak chcete otvoriť sprievodný poznámkový blok pre tento kurz, postupujte podľa pokynov v téme Príprava systému na kurzy dátových vied na import notebooku do pracovného priestoru.
Ak by ste radšej skopírovali a prilepili kód z tejto stránky, môžete vytvoriť nový poznámkový blok.
Uistite sa, že pripojiť lakehouse k notebooku, ako začnete bežať kód.
Krok č. 1: Načítanie údajov
Množina údajov obsahuje 9 995 inštancií predaja rôznych produktov. Obsahuje tiež 21 atribútov. Táto tabuľka pochádza zo súboru Superstore.xlsx použitého v tomto poznámkovom bloku:
ID riadka | ID objednávky | Order Date | Ship Date | Režim odoslania | ID zákazníka | Meno zákazníka | Segment | Krajina | Mesto | Štát | Psč | Región | ID produktu | Kategória | Sub-Category | Názov produktu | Predaj | Množstvo | Zľava | Zisk |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | USA-2015-108966 | 2015-10-11 | 2015-10-18 | Štandardná trieda | SO-20335 | Sean O'Donnell | Spotrebiteľ | Spojené štáty americké | Fort Vlašná | Florida | 33311 | Južne | FUR-TA-10000577 | Nábytok | Tabuľky | Bretford CR4500 Series Štíhla obdĺžniková tabuľka | 957.5775 | 5 | 0.45 | -383.0310 |
11 | CA-2014-115812 | 2014-06-09 | 2014-06-09 | Štandardná trieda | Štandardná trieda | Brosina Hoffmanová (Poľ.) | Spotrebiteľ | Spojené štáty americké | Los Angeles | Kalifornia | 90032 | Západne | FUR-TA-10001539 | Nábytok | Tabuľky | Obdĺžnikové konferenčné tabuľky chromcraft | 1706.184 | 9 | 0.2 | 85.3092 |
31 | US-2015-150630 | 2015-09-17 | 2015-09-21 | Štandardná trieda | TB-21520 | Tracy Blumstein | Spotrebiteľ | Spojené štáty americké | Philadelphia | Pensylvánia | 19140 | Východne | OFF-EN-10001509 | Potreby balíka Office | Obálky | Poly Reťazec Tie obálky | 3.264 | 2 | 0.2 | 1.1016 |
Definujte tieto parametre, aby ste mohli používať tento poznámkový blok s rôznymi množinami údajov:
IS_CUSTOM_DATA = False # If TRUE, the dataset has to be uploaded manually
IS_SAMPLE = False # If TRUE, use only rows of data for training; otherwise, use all data
SAMPLE_ROWS = 5000 # If IS_SAMPLE is True, use only this number of rows for training
DATA_ROOT = "/lakehouse/default"
DATA_FOLDER = "Files/salesforecast" # Folder with data files
DATA_FILE = "Superstore.xlsx" # Data file name
EXPERIMENT_NAME = "aisample-superstore-forecast" # MLflow experiment name
Stiahnite si množinu údajov a nahrajte ju do služby lakehouse
Tento kód stiahne verejne dostupnú verziu množiny údajov a potom ju uloží v úložisku Fabric lakehouse:
Dôležitý
Uistite sa, že ste pred spustením pridali do notebooku. V opačnom prípade sa zobrazí chyba.
import os, requests
if not IS_CUSTOM_DATA:
# Download data files into the lakehouse if they're not already there
remote_url = "https://synapseaisolutionsa.blob.core.windows.net/public/Forecast_Superstore_Sales"
file_list = ["Superstore.xlsx"]
download_path = "/lakehouse/default/Files/salesforecast/raw"
if not os.path.exists("/lakehouse/default"):
raise FileNotFoundError(
"Default lakehouse not found, please add a lakehouse and restart the session."
)
os.makedirs(download_path, exist_ok=True)
for fname in file_list:
if not os.path.exists(f"{download_path}/{fname}"):
r = requests.get(f"{remote_url}/{fname}", timeout=30)
with open(f"{download_path}/{fname}", "wb") as f:
f.write(r.content)
print("Downloaded demo data files into lakehouse.")
Nastavenie sledovania experimentov s MLflow
Microsoft Fabric počas trénovania automaticky zaznamenáva hodnoty vstupných parametrov a výstupné metriky modelu strojového učenia. Tým sa rozširujú možnosti automatického označovania toku MLflow. Informácie sa potom prihlásia do pracovného priestoru, kde k nim môžete získať prístup a vizualizovať ich pomocou rozhraní API toku MLflow alebo pomocou príslušného experimentu v pracovnom priestore. Ďalšie informácie o automatickom označovaní nájdete v téme automatické označovanie v službe Microsoft Fabric.
Ak chcete vypnúť automatické označovanie služby Microsoft Fabric v relácii poznámkového bloku, zavolajte mlflow.autolog()
a nastavte disable=True
:
# Set up MLflow for experiment tracking
import mlflow
mlflow.set_experiment(EXPERIMENT_NAME)
mlflow.autolog(disable=True) # Turn off MLflow autologging
Prečítajte si nespracované údaje z jazera
Prečítajte si nespracované údaje zo sekcie Files lokalite lakehouse. Pridajte ďalšie stĺpce pre rôzne časti dátumov. Rovnaké informácie sa používajú na vytvorenie rozdelených delta tabuliek. Keďže nespracované údaje sú uložené ako excelový súbor, musíte na ich čítanie použiť pandas:
import pandas as pd
df = pd.read_excel("/lakehouse/default/Files/salesforecast/raw/Superstore.xlsx")
Krok č. 2: Vykonanie prieskumnej analýzy údajov
Import knižníc
Pred akoukoľvek analýzou importujte požadované knižnice:
# Importing required libraries
import warnings
import itertools
import numpy as np
import matplotlib.pyplot as plt
warnings.filterwarnings("ignore")
plt.style.use('fivethirtyeight')
import pandas as pd
import statsmodels.api as sm
import matplotlib
matplotlib.rcParams['axes.labelsize'] = 14
matplotlib.rcParams['xtick.labelsize'] = 12
matplotlib.rcParams['ytick.labelsize'] = 12
matplotlib.rcParams['text.color'] = 'k'
from sklearn.metrics import mean_squared_error,mean_absolute_percentage_error
Zobrazenie nespracovaných údajov
Manuálne skontrolujte podmnožinu údajov, lepšie porozumiete samotnej množine údajov a pomocou funkcie display
vytlačte údajový rámec. Okrem toho môžu zobrazenia Chart
jednoducho vizualizovať podmnožiny množiny údajov.
display(df)
Tento poznámkový blok sa zameriava predovšetkým na prognózovanie predaja v Furniture
kategóriách. Týmto sa zrýchli výpočet a pomôže sa vám zobraziť výkon modelu. Tento poznámkový blok však používa adaptívne techniky. Tieto techniky môžete rozšíriť a predpovedať predaj iných kategórií produktov.
# Select "Furniture" as the product category
furniture = df.loc[df['Category'] == 'Furniture']
print(furniture['Order Date'].min(), furniture['Order Date'].max())
Predprocesuje údaje
Podnikové scenáre z reálneho sveta často potrebujú predpovedať predaj v troch rôznych kategóriách:
- Konkrétna kategória produktu
- Konkrétna kategória zákazníka
- Konkrétna kombinácia kategórie produktu a kategórie zákazníka
Najprv vylúpte nepotrebné stĺpce, aby ste mohli vopred spracovať údaje. Niektoré stĺpce (Row ID
, Order ID
,Customer ID
a Customer Name
) sú nepotrebné, pretože nemajú žiadny vplyv. Chceme predpovedať celkový predaj v rámci štátu a oblasti pre konkrétnu kategóriu produktov (Furniture
), aby sme mohli pokles State
, Region
, Country
, City
a Postal Code
stĺpce. Ak chcete prognózovať predaj pre konkrétne miesto alebo kategóriu, možno bude potrebné podľa toho upraviť krok predprocesu.
# Data preprocessing
cols = ['Row ID', 'Order ID', 'Ship Date', 'Ship Mode', 'Customer ID', 'Customer Name',
'Segment', 'Country', 'City', 'State', 'Postal Code', 'Region', 'Product ID', 'Category',
'Sub-Category', 'Product Name', 'Quantity', 'Discount', 'Profit']
# Drop unnecessary columns
furniture.drop(cols, axis=1, inplace=True)
furniture = furniture.sort_values('Order Date')
furniture.isnull().sum()
Množina údajov je štruktúrovaná na dennej báze. Musíme znova použiť stĺpec Order Date
, pretože chceme vytvoriť model na prognózu predaja na mesačnej báze.
Najprv zoskupte kategóriu Furniture
podľa Order Date
. Potom vypočítajte súčet stĺpca Sales
pre každú skupinu, aby ste určili celkový predaj pre každú jedinečnú Order Date
hodnotu. Zmeňte zobrazenie stĺpca Sales
s frekvenciou MS
a agregujte údaje podľa mesiacov. Nakoniec vypočítajte priemernú hodnotu predaja pre každý mesiac.
# Data preparation
furniture = furniture.groupby('Order Date')['Sales'].sum().reset_index()
furniture = furniture.set_index('Order Date')
furniture.index
y = furniture['Sales'].resample('MS').mean()
y = y.reset_index()
y['Order Date'] = pd.to_datetime(y['Order Date'])
y['Order Date'] = [i+pd.DateOffset(months=67) for i in y['Order Date']]
y = y.set_index(['Order Date'])
maximim_date = y.reset_index()['Order Date'].max()
Predveďte vplyv Order Date
na Sales
pre kategóriu Furniture
:
# Impact of order date on the sales
y.plot(figsize=(12, 3))
plt.show()
Pred akoukoľvek štatistickou analýzou je potrebné importovať modul statsmodels
jazyka Python. Poskytuje triedy a funkcie na odhad mnohých štatistických modelov. Poskytuje tiež triedy a funkcie na vykonávanie štatistických testov a štatistického skúmania údajov.
import statsmodels.api as sm
Vykonanie štatistickej analýzy
Časový rad sleduje tieto prvky údajov v stanovených intervaloch s cieľom určiť variáciu týchto prvkov vo vzore časového radu:
úrovne: základná zložka predstavujúca priemernú hodnotu pre konkrétne časové obdobie
trend: popisuje, či časový rad klesá, zostáva konštantný alebo sa v priebehu času zvyšuje
Seasonality: popisuje pravidelný signál v časovom rade a hľadá cyklické výskyty, ktoré majú vplyv na vzorce zvyšujúcich sa alebo znižujúcich sa časových radov
Noise/Residual: Vzťahujú sa na náhodné výkyvy a variabilitu údajov v časovom rade, ktoré model nedokáže vysvetliť.
V tomto kóde podrobíte predprocesu tieto prvky pre množinu údajov:
# Decompose the time series into its components by using statsmodels
result = sm.tsa.seasonal_decompose(y, model='additive')
# Labels and corresponding data for plotting
components = [('Seasonality', result.seasonal),
('Trend', result.trend),
('Residual', result.resid),
('Observed Data', y)]
# Create subplots in a grid
fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(12, 7))
plt.subplots_adjust(hspace=0.8) # Adjust vertical space
axes = axes.ravel()
# Plot the components
for ax, (label, data) in zip(axes, components):
ax.plot(data, label=label, color='blue' if label != 'Observed Data' else 'purple')
ax.set_xlabel('Time')
ax.set_ylabel(label)
ax.set_xlabel('Time', fontsize=10)
ax.set_ylabel(label, fontsize=10)
ax.legend(fontsize=10)
plt.show()
Vykreslenia popisujú sezónnosť, trendy a hluk v údajoch prognózovania. Môžete zaznamenávať základné vzory a vyvíjať modely, ktoré vykonávajú presné predpovede odolných proti náhodným výkyvom.
Krok č. 3: Trénovať a sledovať model
Teraz, keď máte k dispozícii údaje, definujte model prognózy. V tomto notebooku použite model prognózy s názvom sezónne autoregressive integrovaný pohyblivý priemer s exogénnymi faktormi (SARIMAX). SariMAX kombinuje autoregressive (AR) a pohyblivé komponenty priemeru (MA), sezónne odlišné a externé prediktory, aby sa presné a flexibilné predpovede pre časové rady údajov.
Môžete tiež použiť MLflow a Fabric automatické označovanie sledovať experimenty. Tu načítajte delta tabuľky z jazera. Môžete použiť iné delta tabuľky, ktoré považujú za zdroj lakehouse.
# Import required libraries for model evaluation
from sklearn.metrics import mean_squared_error, mean_absolute_percentage_error
Ladenie hyperparametrov
SARIMAX zohľadňuje parametre zapojené do bežného režimu autoregressive integrated moving average (ARIMA) (p
, d
, q
) a pridá parametre sezónnosti (P
, D
, Q
, s
). Tieto argumenty modelu SARIMAX sa nazývajú order (p
, d
, q
) a sezónnych objednávok (P
, D
, Q
, s
). Ak chcete trénovať model, najskôr musíme naladiť sedem parametrov.
Parametre poradia:
p
: Poradie komponentu AR, ktoré predstavuje počet minulých pozorovaní v časovom rade použitom na predpovedanie aktuálnej hodnoty.Tento parameter by mal byť zvyčajne nezáporným celým číslom. Spoločné hodnoty sa nachádzajú v rozsahu
0
na3
, hoci v závislosti od konkrétnych charakteristík údajov sú možné vyššie hodnoty. Vyššiap
hodnota označuje dlhšiu pamäť minulých hodnôt v modeli.d
: Poradie rozdielu, ktoré predstavuje počet výskytov, kedy je potrebné zmeniť časový rad, aby sa dosiahla stacionárita.Tento parameter by mal byť nezáporné celé číslo. Spoločné hodnoty sú v rozsahu
0
do2
.d
hodnota0
znamená, že časový rad je už stacionárny. Vyššie hodnoty označujú počet rôznych operácií potrebných na vytvorenie stacionárnych operácií.q
: Poradie komponentu MA predstavujúce počet chýb v minulosti používaných na predpovedanie aktuálnej hodnoty.Tento parameter by mal byť nezáporné celé číslo. Spoločné hodnoty sú v rozsahu
0
do3
, ale pre určitý časový rad môžu byť potrebné vyššie hodnoty. Vyššia hodnotaq
označuje vyššiu závislosť od minulých výrazov chýb, aby sa mohli vytvárať predpovede.
Parametre sezónnych objednávok:
-
P
: Sezónne poradie zložky AR, podobnép
, ale pre sezónnu časť -
D
: Sezónne poradie odlišností, podobnéd
, ale zo sezónnej časti -
Q
: sezónne poradie komponentu MA, podobnéq
, ale pre sezónnu časť -
s
: Počet krokov na ročné obdobie (napríklad 12 pre mesačné údaje s ročnou sezónnosťou)
# Hyperparameter tuning
p = d = q = range(0, 2)
pdq = list(itertools.product(p, d, q))
seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]
print('Examples of parameter combinations for Seasonal ARIMA...')
print('SARIMAX: {} x {}'.format(pdq[1], seasonal_pdq[1]))
print('SARIMAX: {} x {}'.format(pdq[1], seasonal_pdq[2]))
print('SARIMAX: {} x {}'.format(pdq[2], seasonal_pdq[3]))
print('SARIMAX: {} x {}'.format(pdq[2], seasonal_pdq[4]))
SARIMAX má ďalšie parametre:
enforce_stationarity
: Určuje, či má model vynútiť stacionárnosť v údajoch časového radu pred montážou modelu SARIMAX.Ak je
enforce_stationarity
nastavená naTrue
(predvolené), znamená to, že model SARIMAX by mal v údajoch časového radu vynútiť stacionáritu. Model SARIMAX potom automaticky použije rozdiely v údajoch, aby boli stacionárne, ako to špecifikujed
aD
objednávky, pred montážou modelu. Toto je bežnou praxou, pretože mnohé modely časových radov vrátane SARIMAX predpokladajú, že údaje sú stacionárne.Pre nestály časový rad (napríklad vykazuje trendy alebo sezónnosť) je vhodné nastaviť
enforce_stationarity
naTrue
a nechať model SARIMAX zvládnuť odlišné možnosti a dosiahnuť stacionárnosť. V stacionárnom časovom rade (napríklad pri časovom rade bez trendov alebo sezónnosti) nastavteenforce_stationarity
naFalse
, aby sa predišlo zbytočným rozdielom.enforce_invertibility
: Určuje, či by model mal počas procesu optimalizácie vynútiť invertovateľnosť na odhadované parametre.Ak je
enforce_invertibility
nastavená naTrue
(predvolené), znamená to, že model SARIMAX by mal vynucovať nespornosť na odhadované parametre. Bezmennosť zaručuje, že model je dobre definovaný a že odhadované koeficienty AR a MA sa nachádzajú v rozsahu stacionárity.Uplatnenie invertovateľnosti pomáha zabezpečiť, že model SARIMAX spĺňa teoretické požiadavky na stabilný model časového radu. Pomáha tiež predchádzať problémom s odhadom modelu a stabilitou.
Predvoleným modelom je AR(1)
model. Odkazuje na (1, 0, 0)
. Bežne však môžete vyskúšať rôzne kombinácie parametrov poradia a parametrov sezónneho poradia a vyhodnotiť výkon modelu pre množinu údajov. Vhodné hodnoty sa môžu líšiť od jedného časového radu k inému.
Stanovenie optimálnych hodnôt často zahŕňa analýzu funkcie autocorrelácie (ACF) a čiastočnú funkciu autocorrelácie (PACF) údajov časového radu. Často tiež zahŕňa použitie kritérií výberu modelu – napríklad informačné kritérium Akaike (AIC) alebo kritérium bayesských informácií (BIC).
Vylaďte hyperparametre:
# Tune the hyperparameters to determine the best model
for param in pdq:
for param_seasonal in seasonal_pdq:
try:
mod = sm.tsa.statespace.SARIMAX(y,
order=param,
seasonal_order=param_seasonal,
enforce_stationarity=False,
enforce_invertibility=False)
results = mod.fit(disp=False)
print('ARIMA{}x{}12 - AIC:{}'.format(param, param_seasonal, results.aic))
except:
continue
Po vyhodnotení predchádzajúcich výsledkov môžete určiť hodnoty pre parametre poradia aj parametre sezónneho poradia. Výber je order=(0, 1, 1)
a seasonal_order=(0, 1, 1, 12)
, ktoré ponúkajú najnižšie AIC (napríklad 279,58). Pomocou týchto hodnôt môžete trénovať model.
Trénovať model
# Model training
mod = sm.tsa.statespace.SARIMAX(y,
order=(0, 1, 1),
seasonal_order=(0, 1, 1, 12),
enforce_stationarity=False,
enforce_invertibility=False)
results = mod.fit(disp=False)
print(results.summary().tables[1])
Tento kód vizualizuje prognózu časových radov pre údaje o predaji nábytku. Vykreslené výsledky zobrazujú pozorované údaje aj prognózu pred krokom s tieňovanou oblasťou pre interval spoľahlivosti.
# Plot the forecasting results
pred = results.get_prediction(start=maximim_date, end=maximim_date+pd.DateOffset(months=6), dynamic=False) # Forecast for the next 6 months (months=6)
pred_ci = pred.conf_int() # Extract the confidence intervals for the predictions
ax = y['2019':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead forecast', alpha=.7, figsize=(12, 7))
ax.fill_between(pred_ci.index,
pred_ci.iloc[:, 0],
pred_ci.iloc[:, 1], color='k', alpha=.2)
ax.set_xlabel('Date')
ax.set_ylabel('Furniture Sales')
plt.legend()
plt.show()
# Validate the forecasted result
predictions = results.get_prediction(start=maximim_date-pd.DateOffset(months=6-1), dynamic=False)
# Forecast on the unseen future data
predictions_future = results.get_prediction(start=maximim_date+ pd.DateOffset(months=1),end=maximim_date+ pd.DateOffset(months=6),dynamic=False)
Pomocou predictions
môžete posúdiť výkon modelu na rozdiel od skutočných hodnôt. Hodnota predictions_future
označuje budúce prognózovanie.
# Log the model and parameters
model_name = f"{EXPERIMENT_NAME}-Sarimax"
with mlflow.start_run(run_name="Sarimax") as run:
mlflow.statsmodels.log_model(results,model_name,registered_model_name=model_name)
mlflow.log_params({"order":(0,1,1),"seasonal_order":(0, 1, 1, 12),'enforce_stationarity':False,'enforce_invertibility':False})
model_uri = f"runs:/{run.info.run_id}/{model_name}"
print("Model saved in run %s" % run.info.run_id)
print(f"Model URI: {model_uri}")
mlflow.end_run()
# Load the saved model
loaded_model = mlflow.statsmodels.load_model(model_uri)
Krok 4: Skóre modelu a uloženie predpovedí
Ak chcete vytvoriť zostavu služby Power BI, integrujte skutočné hodnoty do predpokladaných hodnôt. Uložiť tieto výsledky v tabuľke v lakehouse.
# Data preparation for Power BI visualization
Future = pd.DataFrame(predictions_future.predicted_mean).reset_index()
Future.columns = ['Date','Forecasted_Sales']
Future['Actual_Sales'] = np.NAN
Actual = pd.DataFrame(predictions.predicted_mean).reset_index()
Actual.columns = ['Date','Forecasted_Sales']
y_truth = y['2023-02-01':]
Actual['Actual_Sales'] = y_truth.values
final_data = pd.concat([Actual,Future])
# Calculate the mean absolute percentage error (MAPE) between 'Actual_Sales' and 'Forecasted_Sales'
final_data['MAPE'] = mean_absolute_percentage_error(Actual['Actual_Sales'], Actual['Forecasted_Sales']) * 100
final_data['Category'] = "Furniture"
final_data[final_data['Actual_Sales'].isnull()]
input_df = y.reset_index()
input_df.rename(columns = {'Order Date':'Date','Sales':'Actual_Sales'}, inplace=True)
input_df['Category'] = 'Furniture'
input_df['MAPE'] = np.NAN
input_df['Forecasted_Sales'] = np.NAN
# Write back the results into the lakehouse
final_data_2 = pd.concat([input_df,final_data[final_data['Actual_Sales'].isnull()]])
table_name = "Demand_Forecast_New_1"
spark.createDataFrame(final_data_2).write.mode("overwrite").format("delta").save(f"Tables/{table_name}")
print(f"Spark DataFrame saved to delta table: {table_name}")
Krok č. 5: Vizualizácia v službe Power BI
Zostava Power BI zobrazuje priemernú absolútnu percentuálnu chybu (MAPE) 16,58. Metrika MAPE definuje presnosť metódy prognózy. Predstavuje presnosť predpokladaných množstiev v porovnaní so skutočnými množstvami.
MAPE je jednoduchá metrika. Hodnota 10% MAPE predstavuje, že priemerná odchýlka medzi predpokladanými hodnotami a skutočnými hodnotami je 10%, bez ohľadu na to, či odchýlka bola kladná alebo záporná. Normy žiaducej hodnoty MAPE sa líšia v rámci rôznych odvetví.
Svetlomodrá čiara v tomto grafe predstavuje skutočné hodnoty predaja. Tmavomodrá čiara predstavuje predpokladané hodnoty predaja. Porovnanie skutočného a predpokladaného predaja ukazuje, že model efektívne predpovedá predaj pre kategóriu Furniture
počas prvých šiestich mesiacov roku 2023.
Na základe tohto pozorovania môžeme mať istotu v možnosti prognózovania modelu pre celkový predaj za posledných šesť mesiacov roku 2023 a rozšírenia do roku 2024. Táto dôvera môže informovať strategické rozhodnutia o riadení zásob, obstarávaní surovín a ďalších aspektoch súvisiacich s podnikom.