It’s my daily routine. I get ready for work at 8 am, call an auto to take me to the office and talk to auto-wala for 45 minutes while he drives his dusty old in a busy Mumbai morning. Some are old men in white with big tummies who prate about government policies while some are young and bold trying to match the speed of nearby cars. One talks about how his son is doing, the other how this city is changing, another just frustrated by urban civilization wanting to go to the village. These little chit chats are part of me now.
So before we talk any further on this, let us help you to get to know me first. I work as a software developer at Aasaanjobs and majorly my work here includes building models and systems to recommend jobs to common people like these cab drivers. The reason why I am writing this is that, even after so many advancements in the field of technology, they are still not visible at grass root level. People like them don’t need personal assistants, they need better jobs.
So, we feel we have much more to give, to use AI in such places where it directly impacts the commons and not just the elites. And it’s not as simple as it looks like. So how do we go about this? The Indian demographics is so huge and versatile that meeting each and everyone’s’ expectation is a tricky task. So, we took connecting these job seekers with jobs as our mission.
Respecting both job seeker expectations and job requirement while reaching to a consensus where both parties can be benefited by it, we developed a recommendation system which takes more than 30 parameters like Job Role, Location, Age, Experience, Gender, Proficiency Level, Salary etc. and then compares them to find the best possible match.
Pro Tip** The most important part about implementing recommendation system is that the user should have an intuitive understanding of why and how a particular recommendation is provided. This means users should have full knowledge of why a certain recommendation is shown to him/her.
How we exactly do it?
We use the Neo4j graph database to fulfill our recommendation needs. Every entity present in our system and relevant for recommendation is used as a Node in graph and relations between them are represented using edges. We use Graphaware Reco framework to modularize and calculate our recommendations. The search space is reduced using various complex engines which churns out relevant candidates. We then calculate the recommendation score using our proprietary algorithm to compare jobs and candidates. We calculate over 100 metrics on the basis of which we calculate the final score.
Context is very important in calculating the recommendations. We prioritize and tune our hyperparameters w.r.t. these contexts and score accordingly. For e.g. for blue-collar workers, location is very important. So while calculating recommendation for blue-collar job seeker, location is super important. Whereas for white collar people, keywords are generally more sensitive data to look for.
The final score which is being calculated is between -1 to 1, 1 being the perfect match and -1 being the perfect mismatch. We sort the recommendations on the basis of this score and top entries are shown to the users.
Once the recommendation is shown, we take feedback from the job seeker and use it to improve our system. Not only is the objective information is considered, but their activities are also used in figuring out, what best is suited for them. For eg. what user is searching, which jobs he is viewing, on which job he is applying to. All these metrics are considered.
How to know we are improving?
We love feedback. That's the key to improvement. We take help from our recruiters who manually go through all the applications and mark them approved or rejected after careful inspection. Their feedback, combined with our scoring algorithm gives us a broader idea of how our system should evolve and whether or not we are going in the correct direction. To measure the accuracy of our system, we defined the following parameters:
True positive (TP) — The application has a positive score and marked selected by the recruiter
True negative (TN) — The application has a negative score and marked rejected by the recruiter
False positive (FP) — The application has a positive score and marked rejected by the recruiter
False negative (FN) — The application has a negative score and marked selected by the recruiter
We then calculate the precision and recall of our system as:
Precision (P) = TP/ (TP + FP)
Recall (R) = TP / (TP + FN)
F1 score = (2 * P * R) / (P + R)
The final value of F1 score is the single identifier of the overall accuracy of our system. Currently, we are getting a score of around 85% which is at par with industry standards and we are continuously improving on it.
What users see..
We show our recommendation with an explanation of how this recommendation is shown to him. We do this by providing a description of matched parameters and keywords, from which engine this recommendation is coming and how effective that recommendation is (good, better and best match).
This is how Candidates are shown job recommendation:
We also show the matched and unmatched parameters/keywords based on what is present in the Candidate’s resume and Job Description.
And this is how Employers see recommended Candidates:
We also show the reason for selecting a particular recommendation which improves user’s confidence on the system. Some reasons are:
1) Functional Area, Location and Keywords are matching.
2) Candidates like you have applied to this job.
3) You have applied to similar jobs like this.
4) You are viewing a lot of jobs like this.
What users don’t see…
In all, it is a challenging task to calculate recommendations for the masses. We still have a long way to go. We are focussing on improving the accuracy of our algorithms and making it scalable. We are also exploring deep nets for parsing of resume, understanding contexts and to enhance our systems. Definitely exciting times ahead!!