{"id":20269397,"url":"https://github.com/thammami01/simple-recruitment-ml","last_synced_at":"2026-04-12T03:35:08.317Z","repository":{"id":215160111,"uuid":"738261342","full_name":"THammami01/simple-recruitment-ml","owner":"THammami01","description":"Simple recruitment app that allows job posting/application, and viewing regression/classification figures based on entries.","archived":false,"fork":false,"pushed_at":"2024-01-29T06:43:07.000Z","size":1647,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-10T23:19:42.417Z","etag":null,"topics":["flask","matplot-lib","mongodb","python","scikit-learn"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/THammami01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-02T20:20:01.000Z","updated_at":"2024-01-29T06:40:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"bddbeed0-c897-4247-8c4b-e1b21c8abb6c","html_url":"https://github.com/THammami01/simple-recruitment-ml","commit_stats":null,"previous_names":["thammami01/predictive-recruitment-ml"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/THammami01/simple-recruitment-ml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/THammami01%2Fsimple-recruitment-ml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/THammami01%2Fsimple-recruitment-ml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/THammami01%2Fsimple-recruitment-ml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/THammami01%2Fsimple-recruitment-ml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/THammami01","download_url":"https://codeload.github.com/THammami01/simple-recruitment-ml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/THammami01%2Fsimple-recruitment-ml/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266135685,"owners_count":23881803,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","matplot-lib","mongodb","python","scikit-learn"],"created_at":"2024-11-14T12:24:55.711Z","updated_at":"2026-04-12T03:35:03.283Z","avatar_url":"https://github.com/THammami01.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Recruitment ML\n\n## Introduction\n\nThis project is a simple web app dedicated to recruitment. It allows companies to post job offers, candidates to apply, and recruiters to view regression/classification figures based on salary suggestions, years of experience, and possession of a degree.\n\n## Technologies\n\n- Python: The main programming language for the backend and data analysis.\n- Flask: A Python web framework used to develop the backend of the application.\n- MongoDB: A NoSQL database used to store data related to job offers and applications.\n- pymongo: A Python library for interacting with MongoDB from the Flask application.\n- Marshmallow: A Python library used for schema validation and data serialization.\n- scikit-learn: A Python library for machine learning tools, used to generate regression and classification figures.\n- Matplotlib: A Python library for creating graphs, used to visualize the generated figures.\n- NumPy: A Python library for numerical calculations, often used in conjunction with scikit-learn.\n\nThese technologies were chosen for their efficiency in software development, data manipulation, and creating machine learning models.\n\n## Tables and Relationships\n\n| Job | Application |\n|-----|-----|\n| id `PK/uid` | id `PK/uid` |\n| title `string` | years_of_experience `number` |\n| company `string` | has_diploma `boolean` |\n| workspace_type `string` | salary `number` |\n| location `string` | email `string` |\n| type `string` | cv_url `string` |\n| description `string` | job_id `FK/string` |\n| email `string` |\n\n`Job.id` 1 - 0..* `Application.job_id`\n\n## UIs\n\nThe user interfaces are those of the job posting process on LinkedIn.\n\n1. Job Details\n\u003cimg src=\"./docs/01.png\" alt=\"01\" width=\"300\" /\u003e\n\n2. Job Description\n\u003cimg src=\"./docs/02.png\" alt=\"02\" width=\"600\" /\u003e\n\n3. Pre-screening Questions\n\u003cimg src=\"./docs/03.png\" alt=\"03\" width=\"600\" /\u003e\n\n## Backend Endpoints\n\n- `/jobs`:\n  - GET `/`:\n    Retrieves a list of available jobs from the database.\n  - POST `/`:\n    Creates a new job posting.\n  - POST `/\u003cjob_id\u003e/apply`:\n    Allows candidates to submit their applications by providing details such as name, years of experience, possession of a degree, salary expectations, email, and a link to their CV.\n  - GET `/\u003cjob_id\u003e/stats`:\n    Retrieves statistics and generates machine learning figures based on the received applications for a specific job. The figures include regression and classification visualizations based on suggested candidates entries (salaries, years of experience, and possession of a degree).\n\n- `/figures`:\n  - GET `/\u003cid\u003e`:\n    Retrieves the image file of a specific machine learning figure identified by its unique ID.\n\nExample of response using an API client:\n\n\u003cimg src=\"./docs/04.png\" alt=\"04\" /\u003e\n\nExample data within the Jobs collection:\n\n\u003cimg src=\"./docs/05.png\" alt=\"05\" /\u003e\n\nExample data within the Applications collection:\n\n\u003cimg src=\"./docs/06.png\" alt=\"06\" /\u003e\n\n## Figures Types\n\nThree types of figures have been employed in the application:\n\n- Decision Tree for Classification:\nThe first type of figure showcases a decision tree based on classification data. This tree provides a visual representation of classification criteria, such as years of experience, suggested salaries, and possession of a degree. The nodes of the tree illustrate the decisions made to classify applications based on these criteria.\n\n- Decision Tree for Regression:\nThe second type presents a decision tree for regression. It is designed to assess the relationships between years of experience and suggested salaries.\n\n- Linear Regression:\nIn addition to decision trees, we will generate linear regression plots. This third type of figure presents a linear regression line that models the relationship between a specific feature (such as years of experience) and the target variable (suggested salaries). This graphical representation provides an intuitive view of regression and facilitates understanding of linear relationships between variables.\n\n## Figures Visualization\n\nSample job applications used for demonstration:\n\n```python\n[\n  {\"salary\": 1000, \"years_of_experience\": 0, \"has_diploma\": False},\n  {\"salary\": 1500, \"years_of_experience\": 1, \"has_diploma\": False},\n  {\"salary\": 1700, \"years_of_experience\": 1, \"has_diploma\": True},\n  {\"salary\": 1200, \"years_of_experience\": 0, \"has_diploma\": False},\n  {\"salary\": 1150, \"years_of_experience\": 0, \"has_diploma\": False},\n  {\"salary\": 1800, \"years_of_experience\": 3, \"has_diploma\": True},\n  {\"salary\": 1550, \"years_of_experience\": 1, \"has_diploma\": False},\n  {\"salary\": 1750, \"years_of_experience\": 2, \"has_diploma\": False},\n  {\"salary\": 2200, \"years_of_experience\": 4, \"has_diploma\": True},\n  {\"salary\": 2050, \"years_of_experience\": 5, \"has_diploma\": True},\n  {\"salary\": 3000, \"years_of_experience\": 5, \"has_diploma\": True},\n  {\"salary\": 4000, \"years_of_experience\": 10, \"has_diploma\": True},\n  {\"salary\": 3500, \"years_of_experience\": 8, \"has_diploma\": True},\n  {\"salary\": 4500, \"years_of_experience\": 10, \"has_diploma\": True},\n  {\"salary\": 4200, \"years_of_experience\": 12, \"has_diploma\": True},\n]\n```\n\nWe will integrate these three types of figures on eight occasions:\n\n- Decision Tree - Experience (feature) vs Salary (target):\nA decision tree based on candidates' years of experience, providing insights into how experience influences suggested salaries.\n\n\u003cimg src=\"./docs/07.png\" alt=\"07\" /\u003e\n\n- Decision Tree - Salary vs Experience:\nA second decision tree based on suggested salaries, showing how salaries are influenced by candidates' experience.\n\n\u003cimg src=\"./docs/08.png\" alt=\"08\" width=\"800\" /\u003e\n\n- Decision Tree - Degree vs Experience:\nA decision tree analyzing the relationship between possessing a degree and candidates' years of experience.\n\n\u003cimg src=\"./docs/09.png\" alt=\"09\" width=\"350\" /\u003e\n\n- Decision Tree - Degree vs Salary:\nAnother decision tree exploring how possessing a degree influences suggested salaries.\n\n\u003cimg src=\"./docs/10.png\" alt=\"10\" width=\"350\" /\u003e\n\n- Decision Tree - Experience vs Degree:\nA decision tree classifying applications based on experience and indicating the relationship with possessing a degree.\n\n\u003cimg src=\"./docs/11.png\" alt=\"11\" width=\"500\" /\u003e\n\nExplanation: the value = [3, 0] indicates that there are 0 samples with the target class (has a degree) True and 3 samples with the target class False. This means that 3 do not have degrees in the field, and 0 do.\n\n- Decision Tree - Salary vs Degree:\nA decision tree analyzing the relationship between suggested salaries and possessing a degree.\n\n\u003cimg src=\"./docs/12.png\" alt=\"12\" width=\"500\" /\u003e\n\n- Linear Regression - Experience vs Salary:\nA linear regression plot illustrating the relationship between experience and suggested salaries, with a prediction range from 0 to 20 years of experience.\n\n\u003cimg src=\"./docs/13.png\" alt=\"13\" width=\"500\" /\u003e\n\n- Linear Regression - Salary vs Experience:\nAnother linear regression plot presenting the inverse relationship, this time between suggested salaries and candidates' experience, with a salary range from 1000 to 5000.\n\n\u003cimg src=\"./docs/14.png\" alt=\"14\" width=\"500\" /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthammami01%2Fsimple-recruitment-ml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthammami01%2Fsimple-recruitment-ml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthammami01%2Fsimple-recruitment-ml/lists"}