← All work

Case study · Procurement analytics, CEU · 2025

Measuring corruption risk in Rail Baltica procurement

Rail Baltica's projected cost rose from €5.8 billion to €15.3 billion, and its completion date moved from 2025 to 2030. With Paula Biša, for Mihály Fazekas's course on procurement corruption at CEU, I checked whether the tenders of EDZL, the Latvian implementer, show the warning signs that usually come with corruption risk.

Course
Public Procurement Corruption & Analytics
Data
77 tenders · 675 contracts · €1.8bn
Method
Red flags · risk index

Data

Latvian public procurement records for 2018 to 2023. EDZL ran 77 tenders that produced 675 contracts worth €1.8 billion. We compared them with the rest of the Latvian market over the same years.

Five red flags, tested before use

We used five red-flag indicators from the procurement-integrity literature: procedure type, single bidding, length of the submission period, length of the decision period, and the share of a buyer's spending that goes to one supplier. A flag only belongs in an index if it predicts something, so we validated each one with logit and OLS models of single bidding. The models control for contract value, buyer type, supply type, year, market (CPV division) and buyer location. The flags that held up were combined into a contract-level Corruption Risk Index, following the Government Transparency Institute approach. All of this is in R (tidyverse, data.table, estimatr, sandwich).

Findings

Red flags measure risk. They do not prove wrongdoing, and the topographic contracts are a place to look more closely, not a finding of corruption.

Code and slides

rail_baltika_corruption_replication on GitHub has the cleaning, validation models, index and presentation.

I now build procurement data systems for clients: see procurement intelligence with RAG and ML.