I have the following problem:

A company, let's call it X, has a job-adds website. It works as a marketplace where job-seekers and companies that have job vacancies can meet.

Their business model is such that job-seekers pay a subscription to get access to the website after a trial period. Companies, on the other hand, don't pay anything to post job-adds.

In order to attract companies to post jobs on the website they call them and ask if they're interested. They have a database with N companies that did business with them in the past. Out of those "N" they can only call 20% due to budget and personnel constraints.

They select those 20% out of simple heuristic: companies that posted job adds in the last six months.

What they want is to call companies that have high probability of posting a job add that will generate a match. They consider that a match has happened based on a proxy: the company contacted n different candidates for a particular job-add.

I want to find a data-driven approach to select the best companies for them to call. In other words, provide them with a list of companies that have a high probability of generating adds that match with their current database of users.

The problem I'm having is how to transform this business problem into a machine learning solution.

What I have thought so far is to build a classification model. Each row is a job-add. The features are variables related to the company (size, location), to the user (age, CV, last time logged in), and the job-add itself (salary,education required, position, industry). The target variable is a binary of "the job had a mach or not."

The problem with my approach is that the model is not actually learning anything since my target variable is already known for each job-post (I know which job-adds had a match and which didn't).

I'm looking for some ideas on how I can structure this problem in a data-driven framework. Should I continue with my classification model? Maybe some type of collaborative filtering? I'm sure machine learning can provide better results than their simple heuristic. Thanks!

The data I have:

  • User data, including CV;
  • Who applied to what job and when;
  • Data from the companies that posted job-adds;
  • Contacts made by companies to job-seekers (This just tells me if the company clicked a button to look at the user's contact info);
  • $\begingroup$ A couple of questions here: (1) Do you know who has applied for positions in past ads? (2) For those, do you have data on their application or their resume (i.e, what do you know about the client base)? $\endgroup$
    – Paul
    Feb 8, 2017 at 19:55
  • $\begingroup$ @Paul: (1) Yes; (2) I have: the date/time applied to the job, the date of registration to the website, last time logged in, age, sex, city, what position they are looking for, previous work experience, languages spoken, and other CV related information. So I have a pretty rich client base. $\endgroup$ Feb 8, 2017 at 20:30

1 Answer 1


With this kind of general problem there are many possible approaches, and I can't list them all. In general, you want to go with the simplest model that creates value over a more naive approach. So we can look at the different approaches, ranked by complexity, and see what you need for each. This is the order I would try for this analysis:

(1) The simplest approach is just contact a flat 20%, drawn randomly. This is very easy to do, but hopefully it can be improved upon.

(2) Next, you can try an approach based on the basic statistics of the problem at hand. For example, you can calculate for those employers which previously placed ads, how many applications* did they get. And then start with the ones that got the most, and work your way down.

(3) Now that you have baselines sets from doing a blind and then a basic descriptive analytics approach, you can try something a bit more complicated. Assuming you have the text from the past ads, you can mine that text for features which might be descriptive of what they are looking for. If the employers placed multiple ads, you can combine those and look for features in the aggregate. Once you do the same with the resume data, you can create a recommendation engine to match potential employers with employees. You can then use that data to determine which possible employer is most likely to have potential matches in your client pool. As a side effect, this engine can also guide your clients to which jobs might be the best matches. There are many variations which you can use here. For example, for the recommendation engine, you may want to weight your client sample towards clients which have logged in the most recently, or most frequently, so or you can just filter out the "stale" clients who haven't really been looking recently.

*An alarm bell went off when you said you know who applied. Are you sure? Or do you just have clickthrough statistics to know whether they started an application? How do you know that they applied? The first rule of real world data analytics is that you need to be skeptical of your data and especially of what you think your data represents.

  • $\begingroup$ By apply I mean that they clicked a button to send their resume for a specific job. It is a measure that they are "interested" in the vacancy. $\endgroup$ Feb 10, 2017 at 16:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.