|
import gradio as gr |
|
import joblib |
|
import pandas as pd |
|
import numpy as np |
|
from huggingface_hub import hf_hub_download |
|
|
|
|
|
model_filename = hf_hub_download(repo_id="poudel/Job_Predictor", filename="random_forest_pipeline.pkl") |
|
|
|
|
|
loaded_model = joblib.load(model_filename) |
|
|
|
|
|
data_filename = hf_hub_download(repo_id="poudel/Job_Predictor", filename="cleaned_erecruit_open_data.csv") |
|
|
|
|
|
data = pd.read_csv(data_filename) |
|
|
|
|
|
position_titles = data['PositionTitle'].unique().tolist() |
|
designations = data['Designation'].unique().tolist() |
|
agencies = data['Agency'].unique().tolist() |
|
vacancy_types = data['VacancyType'].unique().tolist() |
|
employment_categories = data['EmploymentCategory'].unique().tolist() |
|
locations = data['Locations'].unique().tolist() |
|
vacancy_6_months_or_less = data['Vacancy6MonthsOrLess'].unique().tolist() |
|
|
|
|
|
def predict_applicants(position_title, designation, agency, vacancy_type, employment_category, location, vacancy_6_months_or_less, number_of_vacancies, number_of_successful_applicants): |
|
|
|
input_data = pd.DataFrame({ |
|
'PositionTitle': [position_title], |
|
'Designation': [designation], |
|
'Agency': [agency], |
|
'VacancyType': [vacancy_type], |
|
'EmploymentCategory': [employment_category], |
|
'Locations': [location], |
|
'Vacancy6MonthsOrLess': [vacancy_6_months_or_less], |
|
'NumberOfSuccessfulApplicants': [number_of_successful_applicants], |
|
'NumberOfVacancies': [number_of_vacancies] |
|
}) |
|
|
|
|
|
input_data['Success_Ratio'] = input_data['NumberOfSuccessfulApplicants'] / input_data['NumberOfVacancies'].replace(0, np.nan) |
|
input_data['Applicants_per_Vacancy'] = input_data['NumberOfVacancies'] / np.where(input_data['NumberOfSuccessfulApplicants'] == 0, np.nan, input_data['NumberOfSuccessfulApplicants']) |
|
|
|
|
|
input_data['Success_Ratio'] = input_data['Success_Ratio'].fillna(0) |
|
input_data['Applicants_per_Vacancy'] = input_data['Applicants_per_Vacancy'].fillna(0) |
|
|
|
|
|
try: |
|
prediction = loaded_model.predict(input_data) |
|
return f"Predicted Number of Applicants: {int(prediction[0])}" |
|
except Exception as e: |
|
return f"Error during prediction: {str(e)}" |
|
|
|
|
|
with gr.Blocks() as interface: |
|
|
|
gr.Markdown("# NT's Job Predictor") |
|
gr.Markdown("Select the job details below to predict the number of applicants for a given position.") |
|
|
|
with gr.Row(): |
|
position_title_input = gr.Dropdown(choices=position_titles, label="Position Title", value=None) |
|
designation_input = gr.Dropdown(choices=designations, label="Designation", value=None) |
|
agency_input = gr.Dropdown(choices=agencies, label="Agency", value=None) |
|
|
|
with gr.Row(): |
|
vacancy_type_input = gr.Dropdown(choices=vacancy_types, label="Vacancy Type", value=None) |
|
employment_category_input = gr.Dropdown(choices=employment_categories, label="Employment Category", value=None) |
|
location_input = gr.Dropdown(choices=locations, label="Locations", value=None) |
|
vacancy_6_months_or_less_input = gr.Dropdown(choices=vacancy_6_months_or_less, label="Vacancy 6 Months or Less", value=None) |
|
|
|
with gr.Row(): |
|
number_of_vacancies_input = gr.Number(label="Past Number of Vacancies", value=None) |
|
number_of_successful_applicants_input = gr.Number(label="Past Number of Successful Applicants", value=None) |
|
|
|
predict_button = gr.Button("Predict") |
|
|
|
predicted_applicants_output = gr.Textbox(label="Predicted Number of Applicants") |
|
|
|
predict_button.click( |
|
fn=predict_applicants, |
|
inputs=[ |
|
position_title_input, |
|
designation_input, |
|
agency_input, |
|
vacancy_type_input, |
|
employment_category_input, |
|
location_input, |
|
vacancy_6_months_or_less_input, |
|
number_of_vacancies_input, |
|
number_of_successful_applicants_input |
|
], |
|
outputs=predicted_applicants_output |
|
) |
|
|
|
interface.launch(share=True) |
|
|
|
|