README.md

Quantify red flags of suspicious activities.

What this does

This looks for red flags of fraud and corruption in procurement for World Bank contracts. The following red flags are addressed in some way.

Unusual bid patterns

According to "Most Common Red Flags of Fraud and Corruption in Procurement in Bank-financed Projects", (here-on abbreviated "Common Red Flags"), by the Integrity Vice Presidency, unusual bid patterns are a sign of possible collusion.

In collusive bidding cases, it is not unusual for the designated winner to coordinate the bidding by the other participants -- dictating prices to be bid by others to ensure that the designated winner’s bid is the lowest.

Collusive bidding can result in strange bidding patterns. Roundness of losing bid prices is one example.

Losing bid prices are round or unnatural numbers, e.g., 355,000 or 65,888,000 USD (check BER)

The present red flags detector looks at the number of bids and the number of round or unnatural numbers per bid. It produces bid-patterns.png.

Reading this graph, you can look for contracts with lots of round or unnatural bids. These contracts are probably totally fine, but they do raise this red flag, so it might be worth looking at them.

Lowest bidder non-selection

Sometimes, the "[l]owest evaluated bid is unjustifiably declared non-responsive", and this "can indicate bid rigging", according to Common Red Flags. More specifically,

Project officials with a hidden interest in a contractor, or expecting to receive kickbacks from a contractor (sometimes on behalf of other government officials) often pressure Bid Evaluation Committee members to declare the lowest evaluated bid(s) unresponsive, thereby allowing the award of the contract to their preferred contractor, who often offers a much higher price and/or is only marginally qualified.

The present red flags detector looks at the prices of the various bids on contracts for bank-financed projects and looks for situations where low bids were rejected. You may read this as one plot per contract of the prices of the bids (They're here.) or as a single aggregate plot containing the number of rejections and evaluations-but-not-awards for different contracts.

Contracts with lots of rejections or with rejections for low bidders show this red flag. Again, they are probably fine, but they might be a place to start looking for bid rigging.

How to use

Acquire data like so.

pip3 install wbcontractawards
wbcontractawards bids > csv-data/bids.csv
wbcontractawards contracts > csv-data/contracts.csv
cd csv-data
Rscript update.r
cd ..

Now you can install the package and run it.

R CMD INSTALL .
R -e 'library(redflags); detect()'

A few files will be produced in the present directory as output.

Next steps

Ideas from 2014

  1. Convert all currencies to a standard currency.
  2. Improve the price parser (wbcontractawards), specifically for prices that are formatted differently or written in other languages. (It's worth looking a bit at the original C# scraper for inspiration.)
  3. Make the detection of low-bidder-rejection a bit less brittle.

Ideas from 2015



tlevine/red-flags documentation built on May 31, 2019, 3:51 p.m.