# Are facial recognition systems so bad?

Nikolay Donets

10 May 2021 • Python

Forbes posted an article 'London Police Facial Recognition ‘Fails 80% Of The Time And Must Stop Now’'. The question is, are facial recognition systems so bad in reality? To estimate it quantitively let's rephrase the question to the following one: what is the probability that an individual identified as a criminal is a real offender?

First, let's write a simple function in python to estimate it:

``````def if_prob(sensitivity: float, specificity: float, prob: float) -> float:
"""
:param sensitivity: true positive results, probability
:param specificity: true negative results, probability
:param prob:        probability of the event
"""
numerator = sensitivity * prob
denominator = sensitivity * prob + (1.0 - specificity) * (1.0 - prob)
return numerator / denominator
``````

Now we are ready to answer the question. We can assume that the sensitivity of a given facial recognition system is 0.99 with a specificity of 0.99. Therefore we have true positive results in 99 trials out of 100, and we correctly identify false-positive 99 times out of 100. According to the "Annual Abstract of Statistics" (National Office of Statistics. 2009. Retrieved 23 January 2009), the prison population was about 149 people per 100,000 in 2007. From that, the probability of criminal might be estimated as 149/100000. With these numbers we have:

``````>>> if_prob(0.99, 0.99, 149/100_000)
0.1287150311512887
``````

That is, a 12.8% probability to correctly identify a criminal. And to adjust probability to the claimed one in the Forbes article, let's set sensitivity equal to 99.5% and specificity to 99.5%:

``````>>> if_prob(0.995, 0.995, 149/100_000)
0.22896171487699016
``````

That is, a 22.9% probability to correctly identify a real criminal, almost equal to what Forbes reported in the article. Given this, are there any ways to improve performance? One of the options might be a sequential identification with different conditions:

``````| Identifications in sequence | Probability of error         |
|-----------------------------|------------------------------|
| 1                           | (1-0.229)**1 = 0.771 = 77.1% |
| 3                           | (1-0.229)**3 = 0.458 = 45.8% |
| 5                           | (1-0.229)**5 = 0.272 = 27.2% |
| 7                           | (1-0.229)**5 = 0.161 = 16.1% |
``````

To summarize this short note, remember to check business requirements to estimate the performance of systems and understand their limitations in real applications. Properties of a system might be outstanding, but it can produce miserable results in wrong conditions.

Nikolay Donets

See other articles by Nikolay

Related jobs

See all

### WorksHub

CareersCompaniesSitemapFunctional WorksBlockchain WorksJavaScript WorksAI WorksGolang WorksJava WorksPython WorksRemote Works

### Articles hello@works-hub.com Ground Floor, Verse Building, 18 Brunswick Place, London, N1 6DZ 108 E 16th Street, New York, NY 10003