This blog post is extensive. To navigate to a specific topic, utilize the provided "Table of Contents."
Imagine you run multiple retail stores. One day, you suddenly run out of your best-selling product because you didn't anticipate the high demand. Frustrating, right? That's where sales forecasting comes in handy. It helps you plan your inventory and manage resources efficiently, so you're always prepared for your customers' needs.
Effective sales forecasting is fundamental for multiple aspects of retail management and operation, including:
Inventory Management
Accurate sales forecasts help ensure that stores maintain optimal inventory levels—enough to meet customer demand without overstocking, which can lead to increased costs or waste, especially in the case of perishable goods.
Financial Planning
Forecasting sales allow businesses to estimate future revenue and manage budgets more effectively. This is crucial for allocating resources to areas such as marketing, staffing, and capital investments.
Marketing and Promotions
Understanding when sales peaks and troughs are likely to occur enables retailers to plan effective marketing campaigns and promotional offers to boost revenue or manage customer flow.
Supply Chain Optimization
Sales forecasts inform production schedules, logistics, and distribution plans, ensuring that products are available where and when they are needed, thereby reducing transportation and storage costs.
Strategic Decision Making
Long-term sales forecasting supports broader business strategies, including store expansions, market entry, and other capital expenditures.
This case study focuses on developing a predictive model that uses historical sales data from different stores to forecast sales for upcoming periods.
3 examples of real-world market demand forecasting stories
ID | Store_id | Store_Type | Location_Type | Region_Code | Date | Holiday | Discount | Orders | Sales | |
---|---|---|---|---|---|---|---|---|---|---|
147815 | T1147816 | 136 | S2 | L5 | R4 | 2019-02-09 | 0 | No | 33 | 21231.00 |
173429 | T1173430 | 6 | S4 | L1 | R1 | 2019-04-21 | 1 | Yes | 124 | 69333.12 |
84404 | T1084405 | 151 | S1 | L3 | R2 | 2018-08-20 | 0 | Yes | 44 | 27156.00 |
58312 | T1058313 | 34 | S1 | L3 | R1 | 2018-06-09 | 0 | No | 63 | 35919.00 |
173540 | T1173541 | 310 | S2 | L5 | R1 | 2019-04-21 | 1 | No | 63 | 36906.00 |
From the above data fields, we can see that the data contains both categorical and numerical features. The target variable is 'Sales', which we aim to forecast based on the other features. The data spans multiple stores, regions, and dates, providing a rich source of information for analysis and modelling.
Before we start with the analysis, it is important to perform a data sanity check to ensure that the data is clean and consistent. This involves checking for missing values, duplicates, outliers, and other anomalies that could affect the quality of the analysis and modelling.
In this case, the data was clean and well-structured, with no missing values or duplicates.
EDA is an essential step in the data analysis process. It helps us understand the data, identify patterns, relationships, and anomalies, and generate insights that can inform further analysis and modelling. In this section, I will explore the sales data to gain a better understanding of the underlying patterns and trends.
Observations
Observations
Observations
Observations
Observations
Observations
Observations
Observations
Observations
Observations
Following is the link to the notebook for EDA:
Data scientists and analysts often work in Jupyter notebooks, where they create and test new features. This process generates code that non-technical stakeholders may find difficult to interpret.
To share this analysis with a wider audience, I have created an interactive Tableau dashboard that visualizes the sales data and provides user-friendly features for data exploration. This dashboard makes the insights gleaned from the EDA process more accessible and understandable to those without a technical background.
Before starting the analysis, I created an outline of the Tableau dashboard to identify key insights.
This dashboard provides an overview of the sales data, including sales by store type, location type, and region, as well as trends over time. It also includes interactive filters and drill-down capabilities to explore the data in more detail.
Click on the following badge to view the Tableau dashboard or use the embedded dashboard below.
Following Tablueau Dashboard has to be viewed in a wide screen for better viewing experience.
The dashboard reveals that sales data is stationary, lacking a significant upward or downward trend over time. However, the data does exhibit seasonal patterns, such as weekly and monthly seasonality. Additionally, sales volumes differ across various store types, location types, and regions.
Time series analysis is a statistical method used to analyze and forecast time-dependent data. It involves identifying patterns, trends, and seasonal variations in the data to make predictions about future values. In this section, I will perform a time series analysis of the sales data to identify trends, seasonality, and other patterns that can help us forecast future sales.
Global Time Series
As you can see from the above plot there is no clear trend in the data. The sales data is stationary and does not exhibit any significant upward or downward trend over time. For in-depth analysis, please check the Tableau dashboard linked above.
Plot of Seasonal Decompose
The above plot shows the seasonal decomposition of the sales data. The data is decomposed into trend, seasonality, and residual components. The trend component represents the long-term movement of the data, while the seasonal component captures the periodic fluctuations. The residual component represents the random noise in the data.
From the above plot, it is clear that there is no long-term trend in the data. The seasonal component shows that there is a weekly seasonality in the data.
Have you ever wondered why some days your store is bustling with customers while other days it's eerily quiet? That's the magic of weekly seasonality. Understanding these patterns is crucial for retail businesses to optimize their operations and maximize sales
As with any sales data, multiple seasonal patterns are evident. The most important seasonal pattern is weekly seasonality. Weekends tend to have higher sales as compared to other days. The following plots showcase the different seasonal patterns present in the data.
Observations
Observations
Observations
Observations
From all the above observations, we can see that there are multiple seasonal patterns in the data. I used these values to create new features for the model to capture the seasonality in the data.
Hypothesis testing is a statistical method used to make inferences about a population based on sample data. It involves formulating a null hypothesis (H0) and an alternative hypothesis (H1) and using statistical tests to determine whether the sample data provides enough evidence to reject the null hypothesis in favour of the alternative hypothesis.
In this section, I will test several hypotheses related to the sales data to determine whether certain factors have a significant impact on sales. We will be using 0.05 as the significance level for all hypothesis tests. This means that we will reject the null hypothesis if the p-value is less than 0.05.
I used Levene's test to check the equality of variances and the Shapiro-Wilk test to check the normality of the data before performing the hypothesis tests. All the hypotheses for equal variance failed, so I used
a t-test with equal_var=False
for all the hypothesis tests. This essentially converts it to Welch's t-test which is more robust to unequal variances.
Hypothesis: Stores offering discounts will have significantly higher sales than stores not offering discounts.
Verdict: The p-value was found to be 0, which is less than the significance level of 0.05. Therefore, we reject the null hypothesis and accept the alternative hypothesis. This means that stores offering discounts have significantly higher sales than stores not offering discounts.
Hypothesis: Sales on holidays are higher compared to non-holidays.
Verdict: The p-value was found to be 1, which is greater than the significance level of 0.05. Therefore, we fail to reject the null hypothesis. This means that sales on holidays are the same as sales on non-holidays.
Hypothesis: Different store types experience different sales volumes.
Verdict: The p-value was found to be 0 using the Kruskal-Wallis test, which is less than the significance level of 0.05. Therefore, we reject the null hypothesis and accept the alternative hypothesis. This means that different store types experience different sales volumes.
Hypothesis: Different regions experience different sales volumes.
Observations
Verdict: The p-value for the Kruskal-Wallis test was 0, which is less than the significance level of 0.05. Therefore, we reject the null hypothesis and accept the alternative hypothesis. This means that different regions experience different sales volumes.
Observations
The code for hypothesis testing can be found in the notebook linked below.
Businesses rely on planning for success, which necessitates an understanding of future trends. While past sales data has offered valuable insights, we will now utilize machine learning algorithms to predict future sales.
Traditional statistical and econometric models, while valuable in certain contexts, are often limited in their ability to capture the complexities and nuances of real-world sales data. These models typically assume fixed patterns and relationships, which may not always hold true in practice. Machine learning algorithms, on the other hand, are designed to learn and adapt from data, allowing them to identify and model even the most intricate patterns and trends.
In the context of sales forecasting, machine learning algorithms can be employed at various levels of granularity. For example, these algorithms can be used to generate store-level sales predictions, taking into account factors such as local market conditions, demographics, and competitor activity. At the regional or global level, statistical time series models may be more appropriate, as they can capture broader economic trends and seasonality effects.
By combining the strengths of machine learning algorithms and statistical time series models, businesses can develop robust and comprehensive sales forecasting systems. These systems can provide valuable insights into future sales patterns, enabling businesses to anticipate changes in demand, optimize inventory levels, and allocate resources effectively. Ultimately, the ability to accurately forecast sales can give businesses a significant competitive advantage, allowing them to stay ahead of the curve and achieve sustainable growth.
In the following sections, I will delve deeper into the models and forecasting techniques used in this project, as well as the metrics and feature engineering strategies employed to optimize the predictive performance.
When utilizing Machine Learning (ML) algorithms for time series forecasting, it's essential to understand that the data cannot be used in its raw format. ML algorithms typically require training data structured as 'n' rows and 'm' columns, along with corresponding target data with 'n' rows and one or more columns, depending on the specific algorithm.
In the simplest time series forecasting scenario, today's data would serve as the training input, and the model would predict tomorrow's value as the target output. However, to enhance the model's ability to capture underlying patterns and trends within the time series data, it's common practice to utilize a window of past data. For instance, using the previous 30 days of data as input features allows the model to learn from recent historical behavior and make more informed predictions about future values.
This process of transforming time series data into a suitable format for ML algorithms often involves feature engineering techniques, such as creating lagged features, rolling window statistics, and incorporating time-based features like day of the week or month of the year. These additional features can provide valuable context and improve the model's predictive performance.
We will go into detail about this in the upcoming Feature Engineering section.
During my experiments, I tried various machine learning algorithms, including Linear Regression, Random Forest, XGBoost, and LightGBM to forecast sales data.
Linear Regression is a simple and interpretable model that can capture linear relationships between features and the target variable. However, it struggled to capture the complex patterns and non-linear relationships present in the data.
ElasticNet is a variant of Linear Regression that combines L1 and L2 regularization. It was tested but did not yield significant performance improvements.
Random Forest is an ensemble learning algorithm that builds multiple decision trees and combines their predictions to produce a final output. While Random Forest performed better than Linear Regression, it took a long time to train and was not as accurate as XGBoost and LightGBM.
XGBoost is an optimized distributed gradient boosting library designed for speed and performance. It gave good results but was inconsistent in terms of duration of training. Sometimes it took a long time to train, and sometimes it was faster.
LightGBM is a gradient-boosting framework that uses tree-based learning algorithms. It is known for its speed and efficiency, making it a popular choice for time series forecasting tasks. It consistently outperformed the other algorithms in terms of speed and accuracy. It provided almost similar MAE(Mean Absolute Error) as XGBoost but was faster in training.
Eventually, I settled on using LightGBM as the primary model for sales forecasting due to its superior performance and efficiency.
All the code for the above models can be found in the following notebook:
I used Mean Absolute Error (MAE) as the evaluation metric for the models. MAE is the average of the absolute differences between the predicted and actual values. It gives us an idea of how far off our predictions are from the actual values. The lower the MAE, the better the model's performance.
The standard deviation of the sales was 18084, so an MAE between 5000 and 10000 was considered a good value.
When it comes to Forecasting techniques using ML algorithms there are multiple ways to forecast the sales data. The following are the techniques:
Single-step Forecasting
Single-step forecasting is a forecasting technique that involves predicting one future time step at a time. In the context of this project, it would mean using the data from the previous 30 days to forecast the sales for the next day.
This is a simple and straightforward approach that can be effective for short-term forecasting.
Multi-step Forecasting
Multi-step forecasting is a forecasting technique that involves predicting multiple future time steps simultaneously. In the context of this project, it would mean using the data from the previous 30 days to forecast the sales for the next 7 days.
This can be done by training a separate model for each day ie. training a model for day 1, training another model for day 2 and so on. This is computationally expensive and not feasible for this project as it requires training and maintaining 7 models.
Multi-output Forecasting
This is computationally less expensive compared to multi-step forecasting as we train a single model to predict multiple days in the future.
In the context of this project, it would mean using the data from the previous 30 days to forecast the sales for the next 7 days. This is a more advanced technique compared to single-step forecasting (predicting one-time step ahead) and often requires additional feature engineering and more complex models. One can use MultiOuput Regressor from sklearn to implement this if the algorithm doesn't support multi-output forecasting natively.
Here is the link to the documentation: MultiOutput Regressor
Recursive Forecasting
Recursive forecasting is a methodology that utilizes historical data to predict future values. The model uses the data from the preceding 30 days to forecast the next day's value. It is an extension of single-step forecasting but is applied iteratively to predict multiple future values.
If a projection for multiple days in the future is required, the predicted value for the next day must be used as input for the subsequent day's prediction, and this process is repeated for each successive day. This iterative process is known as recursion.
While recursive forecasting can be effective, it is essential to note that the accuracy of the predictions can degrade with each iteration. This is due to the fact that each prediction is based on a previous prediction, and any errors in the initial prediction will be compounded in subsequent predictions.
Therefore, while recursive forecasting can be a valuable tool for short-term forecasting, it may not be suitable for long-term forecasting due to the potential for accumulating errors.
The code for Recursive forecasting can be found in the notebook linked below.
Lag Features
The time series analysis revealed multiple seasonalities within the data. To address this, I incorporated a 1-day lag, 7-day lag, 12-day lag, and 30-day lag as features. From these lag values, I derived the following features:
Date Features
Since the above date features are cyclical, I used sin and cos transformation to convert them into linear features. Doing this helps the model to understand the cyclical nature of the features. for eg.
df['Day_sin'] = np.sin(2 * np.pi * df['Day']/31)
df['Day_cos'] = np.cos(2 * np.pi * df['Day']/31)
Other Features
The above 2 features play a very important role in sales forecasting. Sales are generally higher during weekends and holidays, so these features can help the model capture the seasonality in the data.
Feature Importance
From the above plot, we can see that the most important feature is the 1-day lag feature. This means that the sales on the previous day have the most impact on the sales for the current day.
Model Interpretation Plot
Model interpretation is different from feature importance. Feature importance tells us how much each feature contributes to the model's predictions, while model interpretation tells us how each feature affects the model's predictions. A Python package called shap is used to interpret the model.
Following is the code used to generate the model interpretation plot:
import shap
fig, ax = plt.subplots(figsize=(10, 5))
# following data is test dataframe
transformed_forecast_df = pd.DataFrame(transformed_forecast_data, columns=pipeline[1].get_feature_names_out())
# Generate SHAP values
explainer = shap.TreeExplainer(lgbm)
# get the first row of the test data
shap_values = explainer.shap_values(transformed_forecast_data[0].reshape(1, -1))
# Create the SHAP waterfall plot
shap.waterfall_plot(
shap.Explanation(
values=shap_values[0],
base_values=explainer.expected_value,
data=transformed_forecast_df.iloc[0, :],
feature_names=transformed_forecast_df.columns
),
max_display=15,
show=False
)
# Set the title and show the plot
plt.title(f"SHAP Waterfall Plot for Store ID {forecast_df['Store_id'].iloc[0]}")
plt.show()
From the above plot, we can see that Discount
had a positive impact on the sales, while Is Weekend
had a negative impact on the sales.
Upon inspecting the data, I confirmed that on the above date, It was a Discount day and also it was not a Weekend. This explains the positive impact of 'Discount' and the negative impact of 'Is Weekend' on sales.
This is how I can verify the model's predictions and understand the impact of each feature on the model's predictions.
Actual vs. Predicted
Actual vs Predicted Sales
From the above plot, we can see that the model can predict the sales approximately. However, it couldn't predict the dips accurately.
Residuals
From the above plot, we can see that the residuals are normally distributed.
Normality of residuals is a key diagnostic check for the validity of a time series model. If the residuals are not normally distributed, it may indicate that the model is misspecified (e.g., missing important variables, incorrect functional form, or inadequate handling of seasonality or trends).
Non-normality in residuals can also suggest the presence of outliers or structural breaks in the data.
Model | MAE |
---|---|
Linear Regression | 7118.54 |
ElasticNet | 6956.83 |
Random Forest | 6515.05 |
XGBoost | 6431.14 |
LightGBM | 6107.66 |
From the above table, we can see that LightGBM performed the best in terms of MAE. Compared to linear models, tree-based models like XGBoost and LightGBM are better at capturing non-linear relationships and interactions between features, making them more suitable for time series forecasting tasks.
Clustering is an unsupervised machine-learning technique used to group similar data points together based on their features. It is commonly used for customer segmentation, anomaly detection, and pattern recognition.
The dataset contained 365 stores, so building 365 individual models was not feasible. Clustering stores based on sales data was considered, with the goal of building a single model for each cluster. However, this approach was abandoned due to the inability to achieve a clear separation of clusters using KMeans clustering.
Following is the plot generated using KMeans clustering
I wanted to incorporate some information about the stores into the model, but I also wanted to avoid data leakage, which can be a potential issue with target encoding on Store IDs. I attempted to use hierarchical clustering to generate clusters and then use the cluster ID as a feature in the model, but this approach was not successful. In the end, I used both target encoding on Store IDs and cluster IDs as features in the model. As you'll see in the feature importance plot provided in the following sections, cluster ID had the least feature importance.
Following is the plot generated using Hierarchical clustering
After clustering the stores, I performed a post-clustering analysis to understand the characteristics of each cluster and identify any patterns or trends that could inform the forecasting model. This is done by aggregating the sales data for each cluster and analyzing the average sales, sales growth, and other relevant metrics.
The above polar plot shows the averaged data for each cluster. We can see that stores belonging to Cluster 2 have high average sales growth while stores belonging to Cluster 3 have high average sales.
Code for generating data required to build dataset for clustering can be found in the notebook linked below.
The code for the clustering can be found in the notebook linked below.
Time series forecasting is a method used to predict future values based on historical data. It involves analyzing the patterns and trends in the data to make informed predictions about future values.
In this project, I used various time series models to forecast sales data at different levels of granularity, including global, regional, and store-level sales.
Unlike traditional machine learning models, time series models are specifically designed to handle time-dependent data and capture the underlying patterns and seasonality present in the data.
The model incorporates level, trend, and seasonality components, making it suitable for time series data exhibiting these characteristics. It was employed to forecast both global and regional sales data.
However, this model wasn't used for store-level sales data due to the presence of 365 stores. Applying the model to each store would be computationally expensive and result in 365 separate models, which would be cumbersome to maintain and deploy.
All the code for the above models can be found in the following notebook:
For the above models, I used a package called Nixtla StatsForecast. They supported exogenous variables and multiple seasonalities. One of their model MFLES is a simple time series method based on gradient boosting time series decomposition. The problem with this package was that there were many models to choose from and it was difficult to understand which model to use for the data. I will be researching more about this package and will be using it in future projects.
All the code for the above ARIMA, MSTL and MFLES models can be found in the following notebook:
Prophet is a forecasting tool developed by Facebook that is designed for analyzing time series data with daily observations that display patterns on different time scales. It is robust to missing data and shifts in the trend, and it provides intuitive parameters that are easy to interpret. I used this model to forecast the global sales data and region-level sales data. Out of all above time series models, Prophet performed the best in terms of MAPE and speed in training
All the code for the above models can be found in the following notebook:
The dataset included discount dates for various stores, and I needed to aggregate this data at the regional level to create a new feature called 'Total_Discount', representing the total number of discounts offered in a region on any given day. This was necessary because I was forecasting for regional and global sales, which required aggregating the data at those levels.
The models were assessed using the Mean Absolute Percentage Error (MAPE), which measures forecasting accuracy by averaging the absolute percentage errors between predicted and actual values. Lower MAPE values indicate better model performance.
The goal was to achieve a MAPE value below 10%, but the models only reached a MAPE value of approximately 15%.
Residuals
From the above plot, we can see that there is slight right skewness in the residuals. This indicates that the model is underestimating the sales values.
Actual vs. Predicted
Actual vs Predicted Global Sales
Model | Region MAPE | Global MAPE |
---|---|---|
Facebook Prophet | 13% - 16% | 14% |
Triple Exponential Smoothing | 17% - 20% | 19% |
ARIMA | 17% | 17% |
MSTL | 17% | 16% |
MFLES | 15% | 18% |
From the above table, we can see that the Facebook Prophet model performed the best in terms of MAPE for both regional and global sales forecasting. This may be because Facebook Prophet can capture multiple seasonalities and also handles exogenous variables well.
I believe that the performance of MSTL and MFLES could have been improved with more tuning and hyperparameter optimization.
Hierarchical forecasting is a method used to forecast sales data at multiple levels of aggregation. In the context of this project, hierarchical forecasting can be used to predict sales at different levels of granularity, such as:
Hierarchical forecasting is further divided into 3 main types:
Top-Down Approach
In this approach, the forecast for the highest level of aggregation (e.g., global sales) is generated first, and then the forecast is disaggregated to lower levels of aggregation (e.g., regional and store-level sales) based on historical proportions or other allocation methods.
Bottom-Up Approach
In this approach, the forecast for the lowest level of aggregation (e.g., individual store sales) is generated first, and then the forecast is aggregated to higher levels of aggregation (e.g., regional and global sales) based on the sum of the lower-level forecasts.
Middle-Out Approach
In this approach, the forecast for the middle level of aggregation (e.g., regional sales) is generated first, and then the forecast is disaggregated to lower levels of aggregation (e.g., individual store sales) and aggregated to higher levels of aggregation (e.g., global sales).
I will be using these techniques as part of future improvements to the model.
Hyperparameter tuning is the process of finding the best hyperparameters for a model. Grid Search and Random Search are the most common methods for hyperparameter tuning. However, these methods are computationally expensive and time-consuming. This is the reason, I chose Optuna for hyperparameter tuning. Along with Optuna, I used MLflow for tracking the experiments. I have explained in detail about MLflow and Optuna in the next section.
Optuna is a hyperparameter optimisation framework that uses Bayesian Optimization to find the best hyperparameters for a model. Optuna optionally saves information about all the trails in a local SQLite database. It also provides a web UI to visualize the trails. Using this web UI, we can compare different trails and also show which hyperparameters are important.
Following are some screenshots of the Optuna Dashboard. Notice how the dashboard provides a detailed view of the minimization process, including the best hyperparameters and their corresponding values.
Optuna Timeline
Hyperparameter Importance
Whenever I work on ML projects, It quickly gets messy with multiple experiments, models, and hyperparameters. Even the Jupyter Notebook gets cluttered with numerous cells. This is where MLflow comes in. MLflow can help you track your experiments, models, and hyperparameters when set up correctly. It also helps you to log the metrics, parameters, and artefacts. It also helps you to compare the experiments and models. It also helps you to reproduce the results.
Following are some screenshots of the MLflow UI. Notice how the dashboard provides a detailed view of the experiments, including the metrics, parameters, and artefacts.
MLFlow Dashboard
I used Streamlit to deploy the model as a web application. Streamlit is an open-source app framework for Machine Learning and Data Science projects. It allows you to create interactive web applications directly from your Python scripts.
The Streamlit app provides the following functionalities:
The code for the Streamlit app can be found here
If the app is inactive for a while, Streamlit may shut it down. To restart the app, click on the "Yes, get this app back up!" button.
Click the following button to view the Streamlit app
Time series forecasting models like Facebook Prophet need details of future data like holidays, and discount days to predict future sales. Similarly, ML models need the past 30 days' data to predict future sales. For predicting store sales, I could have used directly used the cleaned data, but in order to simulate the real-world scenario, I have created a pipeline that takes the raw data, cleans it, and then predicts the sales.
Following is the flow diagram of the pipeline. It's built using https://www.eraser.io/ diagram as a code tool. The diagram code for the pipeline can be found in the here.
ML Prediction Pipeline
Following is the snippet of the code for building the pipeline using scikit-learn and LightGbm ML algorithm used for predicting individual stores sales.
Following is the notebook that contains the code of the pipeline
This case study aimed to demonstrate my expertise in data analysis, machine learning, and deployment, as well as my ability to explain complex technical concepts to a non-technical audience. Throughout this project, I have gained significant insights into sales forecasting and its applications in the retail industry, particularly the importance of feature engineering, model selection, and evaluation metrics.
Initially, I believed that time series forecasting was simply about repeating past data patterns. However, I quickly realized that it is far more complex and distinct from traditional machine learning problems. It requires a deep understanding of the underlying patterns and trends in the data. Feature engineering plays a crucial role in capturing these patterns and enhancing predictive performance.
I previously thought that time series forecasting was limited to ARIMA and Holt-Winters models. I was pleasantly surprised to discover the various machine learning algorithms that can be applied to time series forecasting and the associated challenges. I also learned about Recursive Forecasting, Hierarchical Forecasting, and the critical role of feature engineering in time series forecasting.
This experience has only scratched the surface of time series forecasting, and I am eager to explore more advanced techniques and models in the future, such as implementing Hierarchical Forecasting, Multi-output Forecasting, and utilizing Deep Learning models like LSTMs, GRUs and Transformers for time series forecasting.
The complete code can be found in the GitHub repository below. All the notebooks are in the notebook directory, which is further divided into data processing, EDA and modelling.
One can browse the entire repository on nbviewer by clicking the link below:
Through this case study, I have explored various aspects of time series forecasting, and sales forecasting, including exploratory data analysis, hypothesis testing, time series analysis, machine learning modelling, statistical models and deployment. I have gained valuable insights into the factors influencing sales, identified seasonal patterns and trends in the data, and developed predictive models to forecast future sales.
https://prevedere.com/3-real-world-market-demand-forecasting-stories/