...

Hi, Welcome!

I design, build, and operate AI, machine learning (ML), and data-driven systems, delivering end-to-end solutions for natural language processing, time series analysis, and large language models.

I have experience as a freelance Data Scientist and AI/ML Engineer, creating production-ready models, automated pipelines, and scalable deployment setups across different clients. My work emphasizes MLOps best practices, microservice-based architectures, and cloud-native solutions on Azure.

Despite extensive experience in production systems, I maintain a junior mindset, always curious, always learning, and eager to explore new technologies.

I share insights on Medium, connect on LinkedIn, and publish code on GitHub. This site brings all my work together in one place.

Contact Me

...
Achieving Full Observability with the Grafana Ecosystem
Reaching a coherent, end-to-end observability architecture using the Grafana ecosystem is nontrivial for two reasons: The ecosystem offers many tool and deployment combinations, and the documentation mixes component details with Grafana Cloud promotion. This post summarizes the tooling and architecture I selected to build a fully open-source observability stack while keeping the option to move to Grafana Cloud.
Logging Monitoring Observability Grafana OpenTelemetry Tracing Profiling
...
Data Access Layer Abstraction with Apache Spark
How do you build data processing systems that serve multiple customers with varying storage, compute, and scaling need, without rewriting your core logic each time? In this post, I show how Apache Spark can be used not just for large-scale data processing, but also as an abstraction layer for data access. This approach helps simplify architecture, isolate customer-specific differences, and reduce onboarding and maintenance costs, based on hands-on insights from real projects.
spark pyspark object_relational_mapping SQLAlchemy
...
Time Series Forecasting — Continuous Ranked Probability Score (CRPS)
Many forecasting models use least squares or its variants to minimize prediction errors, treating over- and under-predictions the same. But in practice, the stakes often differ — and single-point predictions don’t reveal how confident the model is.In this post, I turn to parametric models. These assume a specific distribution and predict its parameters directly. In my latest post, I walk through how this works and introduce CRPS — a loss function designed for training such probabilistic models.
python time_Series_Forecasting Continuous_Ranked_Probability_Score loss_function CRPS
...
Time Series Forecasting — Quantile Forecasting — Quantile Loss
Traditional forecasting treats over- and under-predictions equally, but in real-world scenarios like financial markets, the costs can differ significantly. Quantile forecasting addresses this by estimating confidence intervals, offering a nuanced view of uncertainty. In my latest post, I explore how this method works and cover its advantages.
time_Series_Forecasting quantile_regression loss_function quantile_loss pinball_loss