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ľady o budúcich trendoch. Prognózovanie dokáže analyzovať minulý predaj a identifikovať trendy. Môžete sa tiež naučiť zo správania spotrebiteľov optimalizovať stratégie inventára, výroby a marketingu. Tento proaktívny prístup zlepšuje prispôsobiteľnosť, odozvu a celkový podnikový výkon v dynamickom trhovisku.

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 typu open-source
  • Sledovanie experimentov s 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

Sledovanie v poznámkovom bloke

Ak si chcete vyskúšať tieto kroky v poznámkovom bloku, máte tieto možnosti:

  • 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

Ukážkový poznámkový blok prognózy predaja sprevádza tento kurz.

  1. 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.

  2. Uistite sa, že pripojiť lakehouse na notebook , ako začnete bežať kód.

Importovanie notebooku z GitHubu

Notebook AIsample - Superstore Forecast.ipynb sprevádza tento kurz.

Krok č. 1: Načítanie údajov

Množina údajov má 9 995 inštancií predaja rôznych produktov. Obsahuje tiež 21 atribútov. Poznámkový blok používa súbor s názvom Superstore.xlsx. Tento súbor má túto štruktúru tabuľky:

ID riadka ID objednávky Dátum objednávky Dátum vydania 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 Sales 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

Nasledujúci zlomok kódu definuje konkrétne parametre, aby ste mohli použiť 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

Nasledujúci zlomok kódu stiahne verejne dostupnú verziu množiny údajov a potom uloží túto množinu údajov v úryvku kódu v úložisku Fabric lakehouse:

Dôležitý

Musíte pridať lakehouse do notebooku pred spustením. 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.z13.web.core.windows.net/data/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 zdroji automatického označovania v službe Microsoft Fabric .

Ak chcete vypnúť automatické označovanie služby Microsoft Fabric v relácii poznámkového bloku, zavolajte a nastavte mlflow.autolog()disable=True, ako je to znázornené na nasledujúcom úryvku kódu:

# 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

Nasledujúci zlomok kódu prečíta nespracované údaje zo sekcie Súbory v úryvku jazera. Pridáva tiež ďalšie stĺpce pre rôzne časti dátumu. Rovnaké informácie vytvoria tabuľku rozdelenia oblastí. 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 začatím analýzy 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

Ak chcete lepšie porozumieť samotnej množine údajov, manuálne skontrolujte podmnožinu údajov. display Funkciu použite na tlač prvku DataFrame. Zobrazenia Chart môžu jednoducho vizualizovať podmnožiny množiny údajov:

display(df)

Tento kurz zahŕňa poznámkový blok, ktorý sa zameriava predovšetkým na Furniture prognózy predaja podľa kategórií. Tento prístup urýchľuje výpočet a pomáha zobrazovať 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. Ako kategóriu produktov vyberie Furniture nasledujúci úryvok kódu:

# 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
  • Kategória konkrétneho zákazníka
  • Konkrétna kombinácia kategórie produktu a kategórie zákazníka

Nasledujúci zlomok kódu znižuje nepotrebné stĺpce, aby sa údaje mohli vopred spracovať. Niektoré stĺpce (Row ID, Order IDaCustomer IDCustomer Name ), nepotrebujeme, pretože nemajú žiadnu relevantnosť. Chceme predpovedať celkový predaj v rámci štátu a oblasti pre konkrétnu kategóriu produktu (Furniture). Preto môžeme zrušiť stĺpce State, Region, Country, Citya Postal Code . Na prognózu predaja pre konkrétne miesto alebo kategóriu môžeme 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ť Order Date stĺpec, 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 s cieľom určiť 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. Nasledujúci zlomok kódu zobrazuje tieto kroky:

# 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()

V nasledujúcom úryvku kódu zobrazte vplyv Order DateSales na 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. Tento modul 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. Nasledujúci zlomok kódu ukazuje tento krok:

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:

  • Úroveň: Základná zložka, ktorá predstavuje priemernú hodnotu pre konkrétne časové obdobie

  • Trend: popisuje, či časový rad v priebehu času klesá, zostáva konštantný alebo zvyšuje

  • Sezónnosť: Popisuje pravidelný signál v časovom rade a hľadá cyklické výskyty, ktoré majú vplyv na postupné zvyšovanie alebo klesajúce časové rady

  • Hluk/Zostatková hodnota: Týka sa náhodných výkyvov a variability údajov v časovom rade, ktoré model nedokáže vysvetliť.

Nasledujúci zlomok kódu zobrazuje tieto prvky pre množinu údajov po predbežnom dokončení:

# 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 zaznamenať základné vzory a vyvíjať modely, ktoré vytvárajú presné predpovede s odolnosťou 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 sezónne autoregressive integrovaný pohyblivý priemer s exogénnymi faktormi (SARIMAX) forecasting model. 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. Nasledujúci zlomok kódu importuje požadované knižnice:

# Import required libraries for model evaluation
from sklearn.metrics import mean_squared_error, mean_absolute_percentage_error

Ladenie hyperparametrov

SARIMAX zodpovedá parametrom zapojeným do bežného režimu ARIMA (autoregressive Integrated Moving Average) () a pdqpridáva parametre sezónnosti (P, D, Q, ). s Tieto argumenty modelu SARIMAX majú názov order (p, d, q) a sezónne poradie (P, D, Q, s), resp. . 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 zvyčajne mať nezápornú celočíselnú hodnotu. Spoločné hodnoty sú v rozsahu 0 do 3. V závislosti od konkrétnych charakteristík údajov sú však možné vykonať vyššie hodnoty. Vyššia p hodnota označuje dlhšiu pamäť minulých hodnôt v modeli.

  • d: Rozdielne poradie, ktoré predstavuje počet výskytov, kedy je potrebné zmeniť časový rad, aby sa dosiahla stacionárita.

    Tento parameter by mal mať nezápornú celočíselnú hodnotu. Spoločné hodnoty sú v rozsahu 0 do 2. d hodnota 0 znamená, že časový rad je už stacionárny. Väčšie hodnoty označujú, že počet odlišných operácií potrebných na jeho zvýšenie je vyšší.

  • q: Poradie súčasti MA. Tento parameter predstavuje počet chýb v minulosti používaných na predpovedanie aktuálnej hodnoty.

    Tento parameter by mal mať nezápornú celočíselnú hodnotu. Spoločné hodnoty sú v rozsahu 0 od , 3ale určité časové rady môžu vyžadovať vyššie hodnoty. Vyššia hodnota q 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é parametru p , ale pokrýva sezónnu časť
  • D: Sezónne poradie rozdielnosti, podobné parametru d , ale pokrýva sezónnu časť
  • Q: Sezónne poradie súčasti MA, podobné parametru q , ale pokrýva 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.

    Hodnota enforce_stationarity (predvolená) označuje, že model SARIMAX by mal v údajoch True časového radu vynútiť stacionáritu. Pred montážou modelu model SARIMAX automaticky aplikuje odlišnosti na údaje, aby bol stacionárny, podľa d určenia a D objednávok. Toto je bežnou praxou, pretože mnohé modely časových radov, vrátane SARIMAX, predpokladajú, že stacionárne údaje.

    Pre nestály časový rad (napríklad rad, ktorý vykazuje trendy alebo sezónnosť), je vhodné nastaviť ho enforce_stationarity na Truea nechať model SARIMAX zvládnuť odlišné s cieľom dosiahnuť stacionáritu. V stacionárnom časovom rade (napríklad pri časovom rade bez trendov alebo sezónnosti) nastavte enforce_stationarity na False, 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.

    Hodnota enforce_invertibilityTrue (predvolená) označuje, že model SARIMAX by mal v odhadovaných parametroch vynútiť invertovateľnosť. Bezmennosť zaručuje, že dobre definovaný model a 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.

Model AR(1) je predvolený. 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, ako je to znázornené v nasledujúcom úryvku kódu:

# 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. Nasledujúci zlomok kódu ukazuje tento krok:

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. Vizualizáciu zobrazujú nasledujúce úryvky kódu:

# 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)

Nasledujúci úryvok kódu používa predictions na posúdenie výkonu modelu, pričom ho kontrastuje so skutočnými hodnotami. 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í

Nasledujúci úryvok kódu integruje skutočné hodnoty s predpokladanými hodnotami na vytvorenie zostavy služby Power BI. Okrem toho ukladá tieto výsledky v tabuľke v rámci jazera.

# 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.

Snímka obrazovky zostavy Služby Power BI.

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.