---
Introduction to the Match Score Calculation Issue
Recently, during a discussion in Slack, the matching team raised concerns about the quality of recommendations we provide to users. One of our colleagues pointed out that many users were not receiving results that met their expectations. This served as a wake-up call for us. We understood that the accuracy of the match score calculation impacts not only user experience but also the overall efficiency of the platform.
Why It Matters
The match score issue affected not just the development team but also our users. When users cannot find suitable job openings or candidates, they lose interest in our product. We began receiving negative feedback and noticed a decline in engagement on the /jobs and /for-candidates pages. This became a significant barrier to the growth and popularity of our service in the market.
Details of the Problem
During our analysis, we discovered that the current match score calculation algorithm did not take all necessary parameters into account. For instance, it did not consider specific skills that users were looking for in candidates. One user provided us with a concrete example: he was searching for an engineer with experience in machine learning but received results that did not match his request. This created the impression that the system did not understand users' needs.
Initial Attempts at a Solution
We started by trying to refine the existing algorithm by adding several new parameters. However, this did not yield significant improvement. We encountered the issue that the algorithm became too complex and unpredictable. Ultimately, after several iterations, we concluded that we needed to completely rethink our approach to calculating the match score.
Technical Approach
We decided to use a simpler and more transparent model based on weights for various parameters. We assigned a specific weight to each criterion and calculated the final score as the sum of the products of weights and parameter values. Here is an example of the code:
def calculate_match_score(candidate, job):
score = 0
score += candidate.skills * job.required_skills_weight
score += candidate.experience * job.experience_weight
return score
This model allowed us to flexibly adjust the weights and quickly test different combinations, leading to a significant improvement in the quality of recommendations.
Changes in the Product
After implementing the new algorithm, we noticed a marked improvement in user feedback. The number of positive reviews regarding relevant job offers on the /jobs pages increased by 25%. Candidates began receiving more suitable job openings, and in turn, companies became more active in using our platform to find talent. This positively impacted user engagement metrics.
What We Learned
Throughout the project, we made several important conclusions:
- Simplicity is often better than complexity. Complicated algorithms can lead to unpredictability and maintenance challenges.
- Flexibility in adjusting parameter weights allows for quick adaptation to market changes.
- The importance of user feedback. Real-life examples help us better understand what needs improvement.
- Testing various approaches is crucial for finding the optimal solution.
What This Means for Candidates
For candidates, this means they will receive more relevant job openings that better match their skills and experience. This increases their chances of successful employment and reduces the time spent on job searching.
What This Means for Recruiters
Recruiters will be able to find more suitable candidates, enhancing their efficiency. With improved recommendations, they will be able to close job openings more quickly, positively impacting their performance metrics.
Next Steps
While we have made significant progress, we continue to monitor the performance of the new algorithm. One of the tasks we want to tackle in the near future is integrating additional user data to improve calculation accuracy. If we could go back, we would have focused more on testing during the early stages of development to avoid premature conclusions. ---