Hi. I am Sanjay Singh, a serving officer of the Indian Police Service, and this is my personal page. I did B. Tech in Electrical Engineering from the Indian Institute of Technology, Delhi in 1989 before joining the police. With my engineering background, I was able to see that many processes in policing and in general administration could be simplified and made more logical by the application of Information Technology.
For instance, back in 1997, I faced the tedious job of transferring about 700 employees between about 50 units every year in March-April. The first time that I did this, it was a pain in the neck. Basically, the rule of thumb was to transfer from "good" to "bad" postings and vice-versa. The actual strength of every unit had to be kept nearly stable by balancing the "ins" and "outs". Over and above these complications, there were pressure groups lobbying for candidates. Doing this manually took me almost two months to give final shape to a transfer order, and I had to revise it 9-10 times because of goof-ups and oversights. This was clearly a job for an algorithm!
So, I wrote a GUI programme in dBASE PLUS (MS Access was still not known to me). The logic was simple. I considered a) the last four postings of a person, b) his rewards and punishments, c) his seniority in service, and d) whether this would be his last posting. I had a meeting with all the union representatives and asked them whether we could agree on grading all 50 units in four classes based on desirability. They agreed because they also wanted justice for all, and we could arrive at a commonly agreed upon grading.
Based on this, the programme ranked every person in order of eligibility. For example, the top man could have had a combination of generally bad postings on last four occasions (not one!), good service record, seniority and eligibilty to get a desired posting towards the end of his career; in varying degrees. I also managed to pass the tedium from myself to my back-office (of about 10 officers), who were tasked with the data entry and cross-checking. They were also asked to seek and enter three desired postings from all personnel.
The actual transfer process was a 10 minute job, where I dragged and dropped personnel from their parent unit to their first eligible choice, traversing the list from top to bottom. All units were eligible in the beginning because some persons would be due for a transfer at the end of their tenure. Every transfer would add one vacancy (from where the person was transferred) and reduce one (from where he was transferred to). Units would gradually become ineligible as they got filled up, be grayed out, and incapable of selection. If a person's choices couldn't be met, I posted him to the best available post among the remaining units.
This turned out to be just and highly satisfying. It also taught me a maxim. Take the man out of the decision process. Let the outcome be predictable by a machine.
Naturally, I picked up MS Access and Visual Basic for Access in the subsequent years. This opened up the world of Relational Database Management Systems to me, and I could model much of the organisational knowledge into a durable, searchable and tree-like structure. This was my first interest in knowledge representation. How can you represent the gargantuan knowledge of an organisation as organically as possible, like a giant brain?
I made a Crime-Criminal database system that enabled retrieval of entire crime-records of searched criminals alongwith the case-status, other co-accused criminals, and also allowed for search of cases based on Police Station, category of crime, time period, etc. The USP was the modelling of a criminal's involvement in a crime through a linking table, thus reproducing a perfect many-to-many relationship. The GUI was also very handy and it was easy to both search and navigate the search results, going from crimes to criminals and vice-versa.
This system was adopted by my boss, the ADG, CID in 2006, and all units of CID were asked to use it. Since this was a standalone system, I made clones for every sub-unit and we had a periodic synchronization to a master database. The biggest drawback of the system was its standalone nature. We couldn't have effective integration with our remote units, and only the HQ could use it satisfactorily.
Around 2015, I taught myself web development using Ruby on Rails as a hobby. It dawned upon me that I could make my Crime-Criminal system non-localized by using web technology! Thus was Crime Criminal Search born. It was launched in 2015. Over the years it has become the go to application for all field-level officers for assistance in crime investigation. It is possibly the only IT system that has been adopted voluntarily by field officers, without any coercion by leadership.
It was nominated for DG, NCRB's trophy for in-house IT development in 2015, and was shortlisted in the five best applications from amongst 47 entries sent by 19 police organisations across the country. It received high commendation from DG, NCRB. Although it is not possible to publicly share the functioning of the application, I am sharing a link to the reaction of Dr Arvind Verma, Professor, Department of Criminal Justice, Indiana University, Bloomington (USA) to my presentation of CCS to his class comprising police officers and criminologists.
I also taught myself iOS development, and made an iPhone app to talk to CCS. This was launched in 2017 by the DG&IGP.
I re-wrote the CCS application using Graph Theory in 2021. I had migrated to Python by this time, so the web app was written in Django. But, the major paradigm shift was the adoption of a Graph Database, namely Neo4j, to model my data. Instead of tables, I began to see Nodes and Relationships, which is a more natural way of modelling crime data. I began to see connections that I had not even modelled for, and which basically "emerged".
In 2024, I made the CCS code open-source for any police agency to use. I also containerized it using Docker for convenience of the end-user. This is the Github Repository.
I have continued my learning journey on the road to Machine Learning by completing recognised programmes on Coursera and other platforms.
In Feb, 2023, I developed a web application to solve one of the oldest problems of the policing system in India, viz. the matching of unidentified dead bodies (UIDBs) with missing person reports (MPRs). In the period 2017-19, 15390 number of Unidentified Dead Bodies were reported in West Bengal, out of which 9117 remained unidentified. These people did not come from a different planet to get killed. In most cases they belong to either a neighbouring Police Station or at most a nearby District. The problem lies in the failure of the matching procedure. This problem had been brewing in my head for a long time, decades in fact, but I had not made personal efforts to develop a universally applicable system to tackle it because I was under the impression that another agency was working on it. The trigger for my taking it up in 2023 was an incident of kidnapping and murder, where the police failed to match the two events which happened in two different PSs.
I used Facial Recognition to automatically match UIDBs with MPRs. As the size of the database grew, I used Cosine Similarity of vectors to narrow the search space. I implemented a messaging system to inform the two sides (UIDB & MPR) of a successful match. The application was launched on Feb 7, 2023 by DG&IGP, West Bengal. Within three weeks, the application had successfully returned an accident victim's body to his family, reunited a mentally disable woman with her family and informed a family about the death of their missing member several months ago. A press reporter summed it up as "bringing the lost-dead back home".
By OC Sunderban Coastal PS👇🏻
Today (23.02.23) morning at 10:25 hrs we received an information through PS mail from Missing Found traffic App regarding matching of a missing person namely Bapi Mondal, S/o- Lt. Bhagaban Mondal of Puinjali, PS- Sundarban Coastal (Ref:- Sundarban Coastal G.D.E No-379 dtd. 11.02.23) with a image of unknown dead body recovered by Sonarpur G.R.P.S.( Ref:- Sonarpur PS UD Case No- 05/23 dtd 07.02.23. The person was missing since 06.02.23 and he was mentally unstable. We immediately share the information with the family members of the missing person and also made contact with the officers of Sonarpur G.R.P.S and it could be learnt that on 07.02.23 they received a Railway Memo from on duty S.M of Canning R/S that one male aged about 55yrs knocked down by unknown train inbetween Canning Station and Matla Station. The family members have identified the dead body of said Bapi Mondal at both Sonarpur GRPS and N.R.S Hospital Morgue. Necessary arrangements is being done to hand over the dead body to his family members.
This lady could not remember who she was and where she lived. The app reunited her with her family.
This man had died far from home. At least the family got closure.
For extraneous reasons not related to merit, the app had to be taken off. I have open-sourced its code for any police agency to use it as they please.
A writeup on the problem statement can be seen here.
And these are some videos demonstrating the app...
Machine Learning and statistical analysis, in general, has immense potential in policing. I took up a project for analysis of traffic accidents. Traditionally, accidents are clustered by time to identify Black Spots. But if you look closer, it is obvious that there is a pattern across the time of the day, the day of the week, the month of the year, etc. Optimal utilization of traffic police manpower and equipments must take this temporal variation into account. Accordingly, I set about analysing traffic accident data of West Bengal with this perspective by adding the temporal dimension. I found that:
There were an unusually high number of cases recorded after midnight (the bin from 0-1 in the Fig 1). This is obviously faulty data.
There were 97 clusters of accidents by location and time, where I chose a minimum of 10 accidents within 100 m as the criterion. These covered 1448 of the data points (Fig 4).
You can open this map to see these clusters. I have grouped them by hour of day.
For example this (Fig 2) shows a point very near Memari where the accidents tend to happen between 04:00 and 05:00
Whereas this (Fig 3) shows a nearby point where accidents tend to happen between 19:00 and 18:00.
I could have further tried to analyse this in more complex ways, such as the points where a side-road meets a highway, and the vehicle has to speed up as it approaches the highway because of the incline.
You can mail me at sanjaysingh13@gmail.com or follow me on X at @sanjaysingh13