I thought I would share with you one of the recent innovations we have been working on at Profium. The goal of this article is to initiate discussion about possible application areas  for an algorithm we have developed (for example matching qualifications to jobs).

Background to our work lies in a rule engine that we have developed at Profium. The rules we support are in the expressive power of Datalog. This means new facts can be inferred from existing facts with expressions such as (please allow a simple pseudo-syntax for this article):

  • hasWorkExperience(X, Java) and hasCompleted(X, OracleJavaCertificate) -> hasCompetence(X, JavaProgramming) 
  • hasCompleted(X, BscInComputing) and hasCompleted(X, JavaBasics) and hasCompleted(X, JavaAdvanced) -> hasCompetence(X, JavaProgramming)

These two rules both determine whether candidate X has Java programming competence.

Sometimes you run the above rules over all candidates and might get no candidates with Java skills as result. This is where we at Profium decided we can do better. We must be able to give access to the information which candidates are close to being ideal candidates. Let’s use the following skill profiles to convey our approach:

  • hasWorkExperience(John, Java)
  • hasCompleted(John, OracleJavaCertificate)

Here John’s profile does result in the conclusion that he has Java programming competence. However, with Sarah’s profile expressed as:

  • hasCompleted(Sarah, BscInComputing)
  • hasCompleted(Sarah, JavaBasics)

Our algorithm will now signal that for Sarah to have Java programming competence, the closest solution for her is to obtain hasCompleted(Sarah, JavaAdvanced) information to her profile by attending such course.

We have implemented the above with a Java API (might make it available via REST API in the future) that returns information for a given rule what/who the closest matches were and which conditions were not met. In fact, we even ordered the results so that closest matches are returned before least matches.

Competence based job matching is a low hanging fruit for this algorithm but I am hoping the community would challenge us with scenarios in other domains and further challenges they bring to the table.

I look forward to your comments…