Skip to content

SKR-35/Procurement-Risk-Analytics-Shiny

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

R Shiny License

Live dashboard: https://skr-35.shinyapps.io/procurement-risk-analytics-dashboard/

Procurement Risk Analytics (Polish Public Procurement Data)

An end-to-end procurement risk analytics framework built in R and Shiny using publicly available Polish procurement data.

The project combines statistical anomaly detection, buyer and vendor risk scoring, relationship analysis, competition indicators and interactive dashboards to identify procurement patterns that may warrant additional review.

Dashboard overview

Voivodeship risk map


Data Source

This project uses public procurement data provided by Atlas Przetargów.

Data source:

The data remains the property of its original providers and is used here for educational, analytical and research purposes.

Geographic voivodeship boundaries used in the map view are based on the open GeoJSON files from:


Citation

This project uses procurement data provided by Atlas Przetargów.

Citation:

Atlas Przetargów. (2026). Polish Public Tenders Dataset (BZP + TED) (Version 2026.Q2) [Data set]. https://doi.org/10.5281/zenodo.19634050

Project Goals

The raw Atlas Przetargów dataset contains more than 1.4 million procurement notice records. These records cover the full notice lifecycle. For risk analytics, this project focuses on result and award notices, which represent concluded procurement outcomes. After this analytical filtering step, the dashboard review universe contains 367,287 result notices and 188,788 aggregated buyer-vendor relationships.

The objective is not to determine wrongdoing. Instead, the framework aims to:

  • Identify statistical anomalies
  • Prioritize procurement entities for review
  • Detect unusual buyer-vendor relationships
  • Measure competition levels
  • Highlight concentration risks
  • Support procurement audit and investigation workflows

The project follows a risk-based approach similar to those used in:

  • Internal Audit
  • Fraud Analytics
  • Financial Crime Compliance
  • Procurement Risk Management
  • Public Sector Oversight

Key Capabilities

1. Data Preparation

  • Procurement notice ingestion
  • Buyer enrichment
  • Vendor enrichment
  • Relationship construction
  • Value normalization
  • Data quality checks

2. Benford Analysis

The framework evaluates first-digit distributions against Benford's Law.

Features:

  • Overall Benford analysis
  • Province-level analysis
  • CPV division analysis
  • Buyer-level analysis
  • Chi-square testing
  • MAD (Mean Absolute Deviation)

Outputs:

  • Actual vs Expected distributions
  • Statistical deviation metrics
  • Review candidates

3. Vendor Risk Scoring

Vendor scores are calculated using indicators such as:

  • Single-offer contracts
  • Low competition exposure
  • Round-number contract values
  • High-value awards
  • Buyer concentration
  • Relationship concentration

Outputs:

  • Vendor risk score
  • Percentile ranking
  • Risk band classification

Risk Bands:

  • Critical
  • High
  • Medium
  • Low
  • Unknown

4. Buyer Risk Scoring

Buyer-level scoring includes:

  • Vendor concentration
  • Repeat vendor relationships
  • Competition metrics
  • Procurement volume patterns
  • High-value procurement exposure

Outputs:

  • Buyer risk score
  • Percentile ranking
  • Risk band classification

5. Relationship Analytics

The framework constructs buyer-vendor networks and evaluates individual relationships.

Metrics include:

  • Relationship contract count
  • Relationship value
  • Relationship concentration
  • Single-offer relationship exposure
  • Competition indicators

Outputs:

  • Relationship risk score
  • Top risky relationships
  • Buyer-vendor overlap analysis

6. Concentration Analysis

Concentration analysis evaluates dependency and market concentration risks.

Examples:

  • Buyer dependence on vendors
  • Vendor dependence on buyers
  • Value concentration
  • Contract concentration
  • HHI-style concentration indicators

7. Interactive Dashboard

The Shiny application provides:

  • Risk summaries
  • Vendor scorecards
  • Buyer scorecards
  • Relationship analysis
  • Benford visualizations
  • Procurement concentration metrics
  • Interactive Plotly charts
  • Dockerized local deployment

Project Architecture

Procurement-Risk-Analytics-Shiny/
│
├── app.R
├── deploy_shinyapps.R
├── walkthrough.R
├── README.md
├── LICENSE
├── Procurement-Risk-Analytics-Shiny.Rproj
├── Dockerfile
├── .dockerignore
│
├── data/
│
├── outputs/
│	└── map_cache
│   
└── R/
    ├── 01_load_data.R
    ├── 02_clean_prepare.R
    ├── 03_benford_analysis.R
    ├── 04_risk_rules.R
    ├── 05_vendor_scoring.R
    ├── 06_buyer_scoring.R
    ├── 07_relationship_analysis.R
    ├── 08_concentration_analysis.R
    └── 09_plots.R

Script Overview

Script Purpose
01_load_data.R Data ingestion and validation
02_clean_prepare.R Data preparation and enrichment
03_benford_analysis.R Benford Law anomaly detection
04_risk_rules.R Risk indicator construction
05_vendor_scoring.R Vendor risk scorecard generation
06_buyer_scoring.R Buyer risk scorecard generation
07_relationship_analysis.R Buyer–vendor network analytics
08_concentration_analysis.R Concentration and dependency metrics
09_plots.R Plotly visualizations and dashboard helpers
walkthrough.R Step-by-step project walkthrough for reproducing the full pipeline
deploy_shinyapps.R shinyapps.io deployment script

Running the Project

Open the project in RStudio:

source("R/01_load_data.R")
source("R/02_clean_prepare.R")
source("R/03_benford_analysis.R")
source("R/04_risk_rules.R")
source("R/05_vendor_scoring.R")
source("R/06_buyer_scoring.R")
source("R/07_relationship_analysis.R")
source("R/08_concentration_analysis.R")
source("R/09_plots.R")

The walkthrough script runs the project step by step from raw parquet inputs to processed RDS outputs and dashboard-ready analytics objects. For a guided end-to-end run, use:

source("walkthrough.R")

Run the dashboard:

shiny::runApp(launch.browser = TRUE)

Deploy the dashboard:

source("deploy_shinyapps.R")

Run with Docker

The dashboard can also be run inside a Docker container.

Build the image from the project root:

docker build -t procurement-risk-analytics-shiny .

Run the container:

docker run --rm -p 3838:3838 procurement-risk-analytics-shiny

Then open:

http://localhost:3838

Example Use Cases

This framework can support:

  • Procurement audit reviews
  • Public procurement monitoring
  • Vendor screening
  • Competition analysis
  • Fraud risk assessments
  • Collusion screening
  • Internal control testing
  • Risk-based investigations

Disclaimer

This project is intended for educational, analytical and risk-screening purposes.

Risk scores, anomaly indicators, concentration metrics and Benford deviations do not constitute evidence of misconduct.

All outputs should be treated as review signals requiring further investigation and professional judgment.

Dataset Availability

This repository does not redistribute the original procurement dataset.

Users should obtain the source data directly from Atlas Przetargów:

Please refer to the original data provider for licensing terms, updates and usage conditions.

About

Procurement risk analytics platform built in R/Shiny using Polish public procurement data (Atlas Przetargów). Features Benford screening, buyer & vendor risk scoring, relationship analytics, concentration monitoring and Dockerized deployment. Developed as an end-to-end analytics product for procurement risk screening and audit support.

Topics

Resources

License

Stars

Watchers

Forks

Packages