Primero, para nuestro ejemplo, necesitamos desarrollar un modelo. Dado que este artículo se centra en la implementación del modelo, no nos preocuparemos por el rendimiento del modelo. En su lugar, crearemos un modelo simple con características limitadas para centrarnos en la implementación del modelo de aprendizaje.
En este ejemplo, predeciremos el salario de un profesional de datos en función de algunas características, como experiencia, puesto de trabajo, tamaño de la empresa, etc.
Ver datos aquí: https://www.kaggle.com/datasets/ruchi798/data-science-job-salaries (CC0: Dominio Público). Modifiqué ligeramente los datos para reducir la cantidad de opciones para ciertas funciones.
#import packages for data manipulation
import pandas as pd
import numpy as np#import packages for machine learning
from sklearn import linear_model
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder
from sklearn.metrics import mean_squared_error, r2_score
#import packages for data management
import joblib
Primero, echemos un vistazo a los datos.
Dado que todas nuestras funciones son categóricas, usaremos codificación para transformar nuestros datos a numéricos. A continuación, utilizamos codificadores ordinales para codificar el nivel de experiencia y el tamaño de la empresa. Son ordinales porque representan algún tipo de progresión (1 = nivel inicial, 2 = nivel medio, etc.).
Para el puesto de trabajo y el tipo de empleo, crearemos variables ficticias para cada opción (tenga en cuenta que eliminamos la primera para evitar la multicolinealidad).
#use ordinal encoder to encode experience level
encoder = OrdinalEncoder(categories=[['EN', 'MI', 'SE', 'EX']])
salary_data['experience_level_encoded'] = encoder.fit_transform(salary_data[['experience_level']])#use ordinal encoder to encode company size
encoder = OrdinalEncoder(categories=[['S', 'M', 'L']])
salary_data['company_size_encoded'] = encoder.fit_transform(salary_data[['company_size']])
#encode employmeny type and job title using dummy columns
salary_data = pd.get_dummies(salary_data, columns = ['employment_type', 'job_title'], drop_first = True, dtype = int)
#drop original columns
salary_data = salary_data.drop(columns = ['experience_level', 'company_size'])
Ahora que hemos transformado las entradas de nuestro modelo, podemos crear nuestros conjuntos de entrenamiento y prueba. Introduciremos estas características en un modelo de regresión lineal simple para predecir el salario del empleado.
#define independent and dependent features
X = salary_data.drop(columns = 'salary_in_usd')
y = salary_data['salary_in_usd']#split between training and testing sets
X_train, X_test, y_train, y_test = train_test_split(
X, y, random_state = 104, test_size = 0.2, shuffle = True)
#fit linear regression model
regr = linear_model.LinearRegression()
regr.fit(X_train, y_train)
#make predictions
y_pred = regr.predict(X_test)
#print the coefficients
print("Coefficients: \n", regr.coef_)
#print the MSE
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred))
#print the adjusted R2 value
print("R2: %.2f" % r2_score(y_test, y_pred))
Veamos cómo le fue a nuestro modelo.
Parece que nuestro R cuadrado es 0,27, ¡ay! Se necesitaría mucho más trabajo por hacer con este modelo. Probablemente necesitaríamos más datos e información adicional sobre las observaciones. Pero por el bien de este artículo, seguiremos adelante y guardaremos nuestro modelo.
#save model using joblib
joblib.dump(regr, 'lin_regress.sav')