Hussein Elhaddad
← All work
03 / Explainable analyticsIn development

Sawakli AI.

Building interpretable campaign analytics, starting with a trustworthy analytical boundary.

MY ROLE

Team lead · Data loaders & features · 6 people

PROJECT CONTEXT

Graduation project · In development

CORE STACK

Python / PostgreSQL / FastAPI / Next.js

CAMPAIGN / OBSERVE → EXPLAIN03
Click-through rateSynthetic series
REVIEW THE CHANGEOBSERVATIONS →3%2%1%

A change is a starting point for a question.

Prepared example · no live analysis
01 / The problem

Help smaller businesses understand the change.

Sawakli AI aims to explain campaign performance through interpretable metrics, anomaly detection, forecasts, and recommendations. Before those modules can be useful, their inputs need consistent meaning and explicit organization scope.

This is a six-member graduation project, in development. Analytical modules and application infrastructure exist, while complete orchestration, persistence, and dashboard integration remain unfinished.

02 / My contribution

A shared foundation for analytical modules.

I lead the team and coordinate the AI track. My strongest implemented contribution is the organization-scoped PostgreSQL/CSV loading and feature pipeline:

  • Shared typed input contracts so downstream modules consume consistent analytical data.
  • Deterministic efficiency metrics, 7-/14-day rolling CTR/CPC, and daily trends.
  • Explicit missing-data and denominator handling, organization isolation, and CSV/database equivalence validation using 360 campaign-day records.
  • Subsequent isolation/evaluation fixes and analytical coordination.

Original anomaly detection and other analytical implementations are team work. They are not presented as my sole implementation.

03 / Architecture

Make the boundary explicit.

  1. 01Organization-scoped CSV / PostgreSQL inputs
  2. 02Validated, typed analytical data
  3. 03Deterministic + historical features
  4. 04Anomaly / forecast / recommendation modules
  5. 05Orchestration + dashboard integration: unfinished
Team architecture: modular monolith, Next.js web app, FastAPI backend, Python Worker, PostgreSQL, and internal analytical modules.

In the inspected revision, analytical frontend services still return mock data, the Worker executor is simulated, and the AI orchestration entry point is empty. Implemented modules should not be mistaken for a complete end-to-end product.

04 / Engineering decisions

Interpretability starts before the model.

Organization scope is an input invariant.

Loaders require explicit organization boundaries. Analytical data for one business must not leak into another business’s features or reference context. Cross-organization validation makes that boundary testable.

Missing does not mean zero.

Zero denominators, incomplete windows, and date gaps need explicit handling. An unavailable rate should remain unavailable rather than silently becoming evidence of good or bad performance.

One input meaning across two loading paths.

CSV and database inputs share a typed contract. Equivalence validation checks that choosing a source does not change the analytical meaning of the same records.

Team methods should expose their assumptions.

The team’s anomaly ensemble combines robust Z-score, IQR, and Isolation Forest. Forecasting uses Random Forest, linear regression, and moving-average fallbacks, with rolling-origin backtests. Recommendation rules connect explanations to evidence.

05 / Evaluation & boundaries

Keep the evidence at the right scale.

The 360-record validation describes my feature-pipeline work. It is separate from the team’s synthetic anomaly benchmark and is not a production dataset or proof of business impact.

The saved team benchmark uses 60 campaigns across three organizations over 90 days: 5,400 observations per seed. At critical-alert threshold 0.80, the reserved-seed report records 144/152 anomalous days detected and 59/5,248 clean days flagged.

Those are controlled synthetic results. Retrospective forest fitting and the synthetic distribution limit their interpretation. They are not prospectively validated production accuracy, and the threshold is not a calibrated probability.

Status verified against the inspected October 2026 source snapshot. No model training, database mutation, original project tests, or full application execution was performed for this portfolio.

06 / Try the idea

A change should come with context.

Select a synthetic observation. Inspect the numerator, denominator, prepared reference, and explanation—including a day where the rates cannot be calculated.

Explore / campaign observationsSynthetic timeline

Prepared synthetic campaign observations, scoped to one fictional organization. No model ensemble runs here. Select an observation to inspect the values and their interpretation.

Day 01 / Reference day
CTR2.00%
CPC · sample currency0.50

CTR is 2.00%; CPC is 0.50. This is one synthetic observation, not a complete rolling reference window.

Text equivalent — complete synthetic input
ObservationImpressionsClicksSpend
Day 0110,000200100
Day 0210,000190100
Day 0310,00070100
Day 04000
The next useful system

Let’s start with
a good problem.

Questions about the work, an engineering opportunity, or an idea to explore? I’d like to hear it.

Get in touch