| # Python | # Spark | # Flask | # MySQL | # AWS |
| # SQL | # Hadoop | # Django | # PostgreSQL | # Azure |
| # VBA | # Kafka | # SQLite | # GCP | |
| # Flink | # MongoDB | # cloud on-premises |
| time: | June 2017 – January 2021 |
| role: | Data Scientist |
| company: | Grupa Azoty |
Grupa Azoty is a state-owned company and one of the largest fertilizer producers in the world, with annual revenues of around 11 billion PLN. Gas purchasing costs amount to approximately 10 billion PLN annually. Chemical factories produce fertilizers with a margin of about four to five percent. Any change in gas prices directly affects production margins, and high gas prices can render production unprofitable, as margins turn negative, causing the company to lose money on each ton of fertilizer produced.
Fertilizers are produced in large chemical plants that operate 24/7. From time to time, these plants need to be shut down for necessary repairs and replacement of worn-out components. These shutdowns are planned well in advance. The company’s management concluded that it would be more efficient to schedule these shutdowns during periods when gas prices are high to avoid producing fertilizers at a loss. However, the challenge was the lack of reliable forecasts for future gas prices. Specialists were unable to predict gas prices accurately over the next two weeks.
PROJECT IMPLEMENTATION
Initially, a startup was invited to build the predictive model. They proposed a tool that allowed for easy gas price forecasting based on selected predictors. The tool could be used by individuals without data science experience. While it fulfilled part of its role, any error in the forecast cost the company millions of PLN. I decided to build a more advanced model, starting with the creation of a large data lake. The startup assisted me by extracting time series data from various parts of the world, including information on weather, river levels, and gas-based production volumes, among other critical variables.
A great deal of support came from employees who had previously spent decades trying to predict gas prices using simple statistical models. They pointed out that the level of the Rhine River had a significant impact on gas prices—when the river was low, coal barges couldn’t pass, forcing Germany to activate gas power plants. Other factors included low temperatures in Chinese megacities, wind strength in Schleswig-Holstein, Germany, where many wind farms are located, and fertilizer production levels in India.
I started with simple linear regression models and gradually developed more complex models and model ensembles. In the final phase, I used boosted regression models. When the system was functioning well, I began experimenting with recurrent neural networks. Tuning the neural network took over seven months. Gradually, the deep learning networks started outperforming the machine learning model ensembles. Due to the large size of the data lakes supplying predictors for the models, I had to implement distributed data processing using Apache Spark and a file architecture based on Apache Hadoop.
PROJEKT: MODEL PREDYKCYJNY CEN GAZU W HORYZONCIE 14 DNI
Grupa Azoty jest spółką skarbu państwa i jednym z największych producentów nawozów na świecie, z rocznymi obrotami sięgającymi około 11 miliardów złotych. Koszty zakupu gazu wynoszą około 10 miliardów złotych rocznie. Fabryki chemiczne produkują nawozy z marżą wynoszącą około czterech do pięciu procent. Każda zmiana ceny gazu bezpośrednio wpływa na marżę produkcji, a wysokie ceny gazu mogą sprawić, że produkcja stanie się nieopłacalna, ponieważ marża będzie ujemna, a firma będzie dopłacać do każdej tony wyprodukowanego nawozu.
Nawozy sztuczne są produkowane w wielkich instalacjach chemicznych, które pracują 7 dni w tygodniu, 24 godziny na dobę. Co jakiś czas konieczne jest zatrzymanie tych instalacji w celu przeprowadzenia napraw i wymiany zużytych elementów. Te zatrzymania są planowane z wyprzedzeniem. Zarząd firmy uznał, że lepiej byłoby planować te przerwy w momentach, gdy ceny gazu są wysokie, aby uniknąć produkcji nawozów ze stratą. Problem polegał na tym, że firma nie miała wiarygodnych prognoz dotyczących przyszłych cen gazu. Specjaliści nie potrafili przewidzieć, jaka będzie cena gazu w perspektywie dwóch tygodni.
REALIZACJA PROJEKTU
Na początku do budowy modelu predykcyjnego zaproszono firmę startup, która zaproponowała narzędzie do prostego przewidywania cen gazu na podstawie wybranych predyktorów. Narzędzie mogło być obsługiwane przez osoby bez doświadczenia w obszarze data science. Spełniało swoją rolę, ale każda pomyłka w prognozie kosztowała firmę miliony złotych. Zdecydowałem się na zbudowanie bardziej zaawansowanego modelu, zaczynając od stworzenia dużej bazy danych typu data lake. W tym procesie współpracowałem ze wspomnianym startupem, który dostarczał czasowe szeregi danych z różnych części świata, dotyczące pogody, poziomu rzek, wielkości produkcji opartej na gazie oraz innych kluczowych zmiennych.
Wielką pomocą okazali się pracownicy, którzy przez lata próbowali przewidywać ceny gazu na podstawie prostych modeli statystycznych. Wskazali mi na przykład, że poziom rzeki Ren ma ogromny wpływ na ceny gazu – gdy poziom wody jest niski, barki z węglem nie mogą przepływać, co zmusza Niemcy do uruchamiania elektrowni gazowych. Inne czynniki to niskie temperatury w chińskich megamiastach, siła wiatru w Schleswig-Holstein w Niemczech, gdzie znajduje się wiele elektrowni wiatrowych, oraz poziom produkcji nawozów w Indiach.
Na początku użyłem prostych modeli regresji liniowej, a następnie stopniowo budowałem coraz bardziej złożone modele oraz komitety modeli. W końcowej fazie zastosowałem modele regresji ze wzmocnieniem. Kiedy system działał dobrze, rozpocząłem eksperymenty z rekurencyjnymi sieciami neuronowymi. Strojenie sieci neuronowej zajęło mi ponad 7 miesięcy. Stopniowo, sieci neuronowe deep learning zaczęły przewyższać wyniki uzyskiwane przez komitety modeli machine learning. Ze względu na ogromne rozmiary baz danych, które dostarczały predyktory dla modeli, musiałem zastosować rozproszone przetwarzanie danych przy użyciu Apache Spark oraz architekturę plików opartą na Apache Hadoop.
