Emirhan Karatepe

Applied ML & Data Engineering · Istanbul, Turkey

I build systems that make a decision and can say how confident they are — LLM agents that verify their own numbers, demand forecasts that size capacity, and models whose limits I can state as precisely as their results.

Every claim below opens into how it was done and, more importantly, where it stops being true.

Experience

A101 Yeni Mağazacılık A.Ş. AI & R&D Engineer

August 2026 – Present

R&D centre work on retail operations — forecasting, optimisation, and the internal agent platform.

Shipped an internal-audit LLM agent that answers the audit department's standing questions in natural language.

ledllm-agentsdata-engevaluation

How it was done

Built on the company's in-house agent platform with LangGraph, FastAPI, PostgreSQL. The agent reaches production data through a fixed set of read-only SQL tools rather than free-form query generation, and every figure it reports is re-verified by an independent query before it reaches a person. I also built the evaluation harness that keeps those answers honest as the tool set grows, and the measured case for moving the workload to a columnar store.

What this is not

The verification layer is the point, not a detail. An agent that answers confidently and wrongly is worse than no agent — so the design assumes the model will be wrong and checks it. I am not claiming the agent replaces an auditor; it removes the query-writing step between a question and an answer.

Replaced a hand-set constant delivery-slot quota with a demand forecast sized by the newsvendor quantile.

ledforecastingoptimisation

How it was done

Took it end to end with Python, LightGBM, PostgreSQL: the demand-distribution model, the nightly job that runs it, and two live dashboards for operations and revenue. The quantile choice is the interesting part — the cost of an unused slot and the cost of a refused order are not symmetric, so the right quota is not the expected demand.

What this is not

This is a capacity-sizing decision, not a demand-prediction contest. The forecast only has to be good enough to place a quantile; a better point forecast would not necessarily change the quota.

Presented the R&D-centre project on store location and service-polygon optimisation to the Ministry of Industry and Technology audit committee.

contributoroptimisationforecasting

How it was done

The system scores demand with XGBoost, LightGBM, p-median / p-center and feeds it into capacitated location–allocation models to choose where stores and their service polygons should sit.

What this is not

I contributed to this project and presented it; I did not design it alone. The audit was a presentation of work, not a result — the measured outcomes belong to the team.

Leading a TÜBİTAK 2209-B research project on stocking and replenishment policy for perishable produce.

ledresearchforecasting

How it was done

Staged deliberately: vendor-managed inventory and gradient-boosted demand forecasting first, a reinforcement-learning policy layer after — with academic supervision.

What this is not

In progress. There is no measured result yet, and I will not describe one until there is.

Emlakjet A.Ş. Data Scientist

July 2025 – August 2026

Applied ML across a large Turkish real-estate marketplace: valuation, search, and user-behaviour research.

A four-expert multimodal model for Istanbul house prices, reaching 0.884 log R² — +6.1% over an XGBoost baseline.

sole authordeep-learningforecastingresearch

How it was done

Built in PyTorch, DCN-v2, GRU, BERT, attention pooling. Four expert networks — tabular, a GRU over three years of macro and neighbourhood price series, Turkish BERT over listing text, and attention pooling over points of interest within 2 km — are combined by a learned gate per expert. Half of my senior project at Galatasaray University; the other half is the search chatbot below.

Against baselines, on the same task
modellog R²MAPE
Decision Tree0.71630.8%
Random Forest0.80225.0%
XGBoost0.83316.2%
4-expert gated fusion0.88419.0%
Each expert alone
Tabular (DCN-v2)0.773
Text (BERT)0.656
POI (attention)0.530
Temporal (GRU)0.408

What this is not

Two things an interviewer would find, so here they are first. XGBoost still beats it on MAPE (16.2% vs 19.0%) — the model wins on R² and absolute error and loses on relative error. And the ablation shows the tabular expert carries almost all of it: the other three modalities add a real but modest margin. It was also never in production — the live valuation on the platform is a third party's.

Led a chatbot that turns natural-language Turkish property queries into structured searches.

ledllm-agentsdata-eng

How it was done

LLM tool-calling over 4 microservice APIs with Python, function calling, PostgreSQL pg_trgm, resolving locations, listing types and 40+ filters by trigram fuzzy matching. Turkish location names are the hard part — morphology, ambiguous district names, and the same place written six ways. Containerised and deployed through CI.

What this is not

Led, not built alone — I wrote about half the commits and it was a team of four. There is a test suite for location resolution but no published accuracy figure over a query set, so this is a claim about capability, not quality.

Reconstructed user sessions from a clickstream that has no session identifiers, then measured what different co-visitation graphs are good for.

ledrecsysresearchevaluation

How it was done

The log carries only a listing, a browser-scoped identifier and a timestamp — no sessions, no navigation paths. An exponential-decay model infers session boundaries; item–item co-visitation graphs are then built under three edge weightings and evaluated on both community structure and recommendation quality, against a degree-preserving null model. Over a 45 days window: 2,727,327 click events across 449,774 listings.

What each edge weighting is good for
weightingmodularityRecall@20NDCG@20
count0.9850.1130.063
jaccard0.8910.4080.231
PMI0.8300.5080.285

What this is not

The finding is a trade-off, not a winner. Count weighting gives the most cohesive communities and is nearly useless for recommendation; PMI is the best recommender and the least cohesive. Offline research on a log extract — not a deployed recommender.

Built the pipeline and dashboard that turn a raw action log into readable user behaviour — and a new edge-bundling layout to draw it.

leddata-engresearch

How it was done

A Spring Boot 3.5, Java 24, PostgreSQL, Elasticsearch, D3, deck.gl, Leaflet service in a hexagonal layout, with virtual threads and two cache layers, joining a PostgreSQL action log to an Elasticsearch listing index. Seven coordinated views: spatial heatmaps, a 3D hexbin demand surface, choropleths, conversion funnels, and two edge-bundled origin–destination graphs. The method contribution is an endpoint-anchored variant of force-directed edge bundling that keeps geographic departure and arrival angles at fixed coordinates.

What this is not

The under 200 ms render holds at ≤ 200 city pairs/day — the paper says plainly that beyond about a thousand edges a different algorithm is the right choice. An internal analyst tool, and the four use cases are demonstrations, not a measured study of analyst outcomes.

Built a duplicate-listing detector combining image and text signals with learned feature weighting.

ledrecsysevaluation

How it was done

A multi-signal similarity score over cover-image and feature embeddings with image–title overlap, weighted by a hybrid of learned and rule-based components, plus an agent that returns the duplicates of a given listing on request. Python, scikit-learn, embeddings.

What this is not

I do not have a published precision or recall figure on a labelled set, so I describe what it combines rather than how well it scores.

Built an OCR pipeline that finds and blurs phone numbers written into listing photographs.

leddata-eng

How it was done

Detection, localisation and blurring over listing imagery, closing a route people used to move contact off the platform.

What this is not

I have no measurement of how common the behaviour was or how precisely the pipeline caught it. So this is a description of what was built, and nothing about its effect.

Contributed a sales data-mart pipeline to a production Airflow platform feeding BigQuery.

contributordata-eng

How it was done

Wrote the transform SQL and wired it into the warehouse's dependency graph, alongside the data-engineering team who own the platform. Apache Airflow, BigQuery, SQL.

What this is not

A contribution, not ownership. The platform predates me by years and is maintained by someone else — I checked the repository history before writing this line, and an earlier draft of my own CV overstated it.

Publications

Two papers out of the Emlakjet work, both first-authored, both currently with reviewers.

Implicit Session Reconstruction and Co-Visitation Graph Analysis in Large-Scale Listing Clickstreams

E. Karatepe, M. Sözdinler, Y. Doksanbir, G. Akpınar, E. Aktan, A. H. Işık

ASYU 2026 — Innovations in Intelligent Systems and Applications · Özyeğin University, Istanbul · 9–11 September 2026

submitted, under review

Visualizing User Behavior on Real-Estate Platforms: A Case Study in Sessionization, Spatial Aggregation, and Self-Organizing Edge Bundling

E. Karatepe, M. Sözdinler, Y. Doksanbir, E. Aktan, G. Akpınar, A. H. Işık

ASYU 2026 — Innovations in Intelligent Systems and Applications · Özyeğin University, Istanbul · 9–11 September 2026

submitted, under review

Education

Galatasaray University B.Sc. in Computer Engineering

2019 – 2026 · GPA 3.01 / 4.00

Senior project: a multimodal deep-learning model for Istanbul house-price prediction, and a natural-language property-search chatbot built on it.

Contact

The fastest way to reach me is LinkedIn.

LinkedIn

A CV is available on request.