Nuestro trabajo se centra en un dataset con
información relacionada a trabajos de Estados Unidos. La idea del dataSet es
poder predecir el salario de los trabajos utilizando modelos que nos permitan
predecir información.
Los datos fueron encontrados en Kaggle. El cual
es un dataset de libre uso para el análisis de datos, en el siguiente link https://www.kaggle.com/andrewmvd/data-analyst-jobs/tasks. El cual cuenta con 2253 filas y 16
columnas. Las propiedades del dataset se definen de la siguiente manera.
1. Id: esta propiedad es solamente un
número que identifica cada una de las filas del dataset
2. Job Title: este describe el titulo o
nombre del empleo
3. Salary Estimate: esta propiedad
tiene un rango de cuanto paga cada uno de los trabajos. Esta información fue
encontrada en Glassdoor.
4. Job Description: tiene información
relaciona a que es el trabajo que se va a desempeñar.
5. Rating: evaluación que le dan los
empleados a las empresas
6. Company name: el nombre la compañía
que se está evaluando
7. Location: donde se encuentra ubicada
la empresa
8. Company Headquartes location: la
ubicación de la compañía
9. Size: la cantidad de empleados con
los que cuanta la compañía.
10. Founded: el año cuando fue fundada
la compañía
11. Type of ownership: el tipo de
compañía que se va a analizar
12. Industry: la industria a la que
pertenece la empresa
13. Sector: el sector en el que esta la
industria de la empresa
14. Revenue: cuanto genera la compañía
15. Competitors: cuales con los posibles competidores de la
empresa
16. Easy Apply: Si es fácil aplicar para
la empresa o no
Lo primero que se realizó fue cargar el
documento en Python para ver su contenido. Se hace un head para ver el
contenido rápidamente del dataset. Luego se realiza un análisis de la
estructura del dataset, esto para ver que tipos de objetos tiene cada una de
las columnas. Después de esto se pasa verificar si existen valores nulos en el
dataset.
Para poder hacer algunos análisis se requiere
cambiar los valores alfanuméricos a valores numéricos, por lo que se carga otro
dataset para poder analizar la información tanto en su estado original como en
con sus valores numéricos ya que se van a tener que hacer algunas
transformaciones de datos.
Durante el proceso se crean diferentes dataset
para analizar diferentes cosas, por ejemplo, se crea un pequeño dataset con el
salario, título del trabajo y raiting del empleo. Esto para verificar algunas
preguntas que teníamos del set de datos.
Utilizando ordenamiento se busca información
relacionada a los mejores salarios comparándolos con las calificaciones de las
personas. Con esto podemos encontrar datos interesantes del dataset y
determinar que únicamente con estos criterios no podemos predecir correctamente
los salarios. Definitivamente se va a requerir más datos.
Se inicia hacer algunos gráficos para ver los
datos. Por ejemplo, la relación que existe entre Salary Estimate y Job Title.
Los gráficos inicialmente son un poco difíciles de interpretar ya que tiene
muchos datos por lo que se va a crear datasets más pequeños. La idea es poder
entender mejor los datos utilizando set de datos que se pueden visualizar en
los gráficos.
Se crear más ordenamientos para ir entendiendo
los datos de manera simple. Lo primero que se hace es ordenar los datos por
medio del rating para verificar si los salarios más altos se encurtan ubicados
entre las empresas con mayores calificaciones o si no es así. Esto se logra
utilizando la función sort_values de Python que además permite crear
ordenamiento por diferentes tipos de valores del set de datos. Se hacen
ordenamientos por medio del Salary Estimate para poder ver si las empresas con
los salarios más altos cuentan con las mejores calificaciones con esto se puede
determinar que las mejores calificaciones no están estrictamente relacionas a
los mejores salarios de las personas. Por lo que se debe realizar otra serie de
estudios para encontrar mayores relaciones entre los datos con los que
contamos.
La idea de hacer conjuntos de datos más
pequeños realmente nos ayudo a crear muchas observaciones que se pueden
graficar y estudiar de manera detallada. Parte de las observaciones que se
hacen están basadas en los supuestos con los que se inicial el proyecto para
predicción de salarios.
Se hacen otros filtros de datos con diferentes
valores para ir inspeccionando la información un poco más y de esta manera
comprendiendo mucho mejor con que estamos tratando.
Continuando con el proceso de análisis de datos
iniciamos a ver la información que contenía cada una de las propiedades de
nuestro dataset. Utilizando la función unique de Python buscamos los valores
únicos de las diferentes columnas con el fin de poder generar valores únicos
para cada una de las variables. Ya que algunos procedimientos y modelos no
soportan datos alfanuméricos.
Nos damos cuenta de que los valores de las
columnas en algunos casos son muchísimos por lo que transformar esto de manera
manual no es simple. Con esto se decide a crear un algoritmo que nos permite
transformar los datos de manera automática, pero tenemos que guardar la
equivalencia de cada uno de estos datos para futuros estudios.
El algoritmo que creamos realmente es muy
simple. Lo que hacemos es buscar el valor único de cada una de las columnas que
tenemos en el dataset. Creamos una lista que se encarga de asignar un valor
numérico para cada uno de los valores de texto que tiene cada columna. Al final
como resultado tenemos una lista que cuenta con un formato llave/valor para
representar el valor numérico equivalente al dato que tenia el set de manera
original.
El proceso fue encontrar los valores únicos de
cada una de las columnas con esto se generaron valores numéricos que
representaran cada de los datos. Cada columna del dataset tiene una lista que
contiene sus valores números para futuros procesos, esto con el fin de no
olvidar que representa cada uno de los nuevos datos del conjunto. Luego de esto
se crea un ciclo que se encarga de recorrer la columna e ir cambiando el valor
alfanumérico por el valor numérico que representa el dato que tenemos en
nuestro dataset.
Este último proceso se corrió para cada una de
las columnas que no tenían valores numéricos.
En el caso de la columna Easy Apply esto es un
valor true/false lo que representa valores de verdadero o falso. Esta columna
no tenia todos los datos completos y con algunos -1 dentro de su información.
Todos los valores de true se convirtieron en 1 los otros fueron convertidos a
0. Este fue un poco más simple ya que no teníamos esa cantidad enorme de datos
como las otras columnas.
La ultima columnas a la que nos tocaba analizar
para ver que podíamos hacer con esta era la columna de job description. Tomamos
el tiempo de ver qué tipo de información teníamos en esta columna. Se
encuentran los valores únicos de esta columna y prácticamente toda la
información que tenia esta columna era de filas únicas. Es decir, cada una de
las diferentes descripciones de los trabajos eran únicos. Lo que nos llevo a la
tarea de analizar el contenido y fuimos viendo la información que tenía. Esta
columna realmente no tenía información cuantificable o medible. Lo que nos daba
esta columna eran datos de qué tipo de trabajo se estaba hablando, algunas
descripciones de roles y tipos de personas que podrían estar interesadas en el
trabajo. Por ejemplo, algunas hablaban de que querían personas que fueran muy
trabajadoras, etc. Pero no le estaban aportando un valor real al estudio que se
deseaba hacer.
Llegamos a la conclusión que lo mejor seria
quitar la columna de nuestro estudio. Ya que no nos estaba dando un valor
importante a nuestro análisis.
Para continuar con el proceso se hace una
inspección de la estructura de los datos ya con la transformación. Nos damos
cuenta de que algunos tipos de datos no son de tipo int. Esto da problemas con
algunas tareas de análisis de datos.
Por lo que nos dimos a la tarea de convertir
todos los tipos de datos a int32 que realmente era la forma en la que teníamos
almacenados ahora la información. Esto nos permite trabajar con la información
que tenemos con todos los modelos y procesos de visualización que queríamos
crear.
El resultado de dataset por procesar fue con
una estructura de tipos de datos numéricos (int32) que nos permitirá utilizar
todos los tipos de gráficos y modelos.
Nos dimos cuenta de que teníamos pendiente una
columna más por analizar la cual era founded. Esta columna representa cuando la
empresa fue fundada, pero en algunos casos tenia un -1 que representa que no
tiene una fecha de su fundación. Por lo que se realizo otra transformación de
datos y pasamos este dato a un 0. Ahora el 0 representa que la compañía no
tiene fecha de fundación.
A partir de este punto se inicia otra serie de
análisis datos para ver cómo podemos entender mejor la información con la que
contamos.
Como podemos observa en este grafico se hace un
conteo de los tipos de salarios. Que tenemos en los datos. Esto nos demuestra
cual es el salario más ofrecido por las diferentes empresas. Podemos visualizar
de manera simple como se agrupan los rangos salariales que tenemos. Además de
esto se continúa haciendo otros tipos de gráficos con diferente tipo de
información para poder entenderla mucho mejor. Algunos gráficos son difíciles
de entender ya que la cantidad de información es muy amplia.
Con este problema lo que hacemos es crear
subdatasets con filtros que nos permitan ver información de manera más fácil.
Por ejemplo, tomamos todos los datos de las empresas con mejores calificaciones
y con este extracto de datos creamos gráficos.
Esta técnica sin ninguna duda permite entender
mejor la información y crear datos que nos permitan responder a interrogantes
específicas. Este proceso lo hicimos varias veces con el fin de entender diferentes
partes de la información con la que estamos trabajando. El filtrar la
información nos da mayor control sobre lo que deseamos investigar y los
resultados que estamos buscando.
De esta forma por ejemplo se pudo encontrar la
relación que tenemos de los mayores salarios y las evaluaciones de las
personas.
Ahora es
momento de trabajar con los modelos. Para hacer este trabajo se desarrollaron
tres modelos diferentes para 3 tipos de datasets.
Los modelos fueron
·
SVR
·
RF
·
LinearRegression
En el caso de los dataset fueron seleccionados
de la siguiente forma. Uno que encontramos directamente en la página que
proponía cuales eran los valores que se debían seleccionar para crear los
modelos, este fue tomado como el modelo de criterio experto. En el caso de los
otros dos modelos se generar proceso para hacer un feature selection usando
librerías de Python. El primero dataset se utilizo el algoritmo de SelectKBest
y luego el ExtraTreeClassifier. Estos dos últimos nos dieron columnas muy
similares sin embargo si existían diferencias. Por lo que se toma la decisión
de usar ambos para crear modelos y ver cual nos brinda mejores resultados.
El primer modelo que de criterio experto
contiene los siguientes atributos
·
Industry
·
Location
·
Compny
revenue
El modelo que con el algoritmo kBest
·
Job
Title
·
Salary
Estimate
·
Company
Name
·
Location
·
Headquartes
·
Founded
·
Type
of ownership
·
Industry
·
Sector
·
Revenue
·
Competitor
El modelo ExtreTreelassifier
·
Job
Title
·
Salary
Estimate
·
Compnay
name
·
Location
·
Headquarters
·
Size
·
Founded
·
Type
of ownersh
·
Industry
·
Sector
·
Revenue
Ya con estos dataset se procede a crear una
variable para cada dataset que contenga la variable dependiente que será la que
vamos a predecir.
Después de esto se crean los dataset que vamos
a usar, pero sin la variable dependiente esto con el fin de crear los sets de
entrenamiento y de pruebas. Para cada uno de los dataset se crea una parte de
pruebas y una parte de entrenamiento. Se analiza la información que contiene
los sets de entrenamiento y pruebas solo para ver que fuero creados
correctamente.
Luego debemos importar algunas librerías extras
de Python para poder ejecutar algunos modelos que se requieren para poder
predecir la información.
Para la creación de los modelos más simple se
hacen variables que contiene cada uno de los modelos para cada uno de los
datasets.
El siguiente paso que tenemos que hacer es iniciar
a construir los modelos. Utilizando los
datos de entrenamiento vamos a crear cada uno de los modelos.
En total vamos a generar 9 modelos que tenemos
que analizar para ver cual nos da mejores resultados. Con esto vamos a generar
estadísticas que nos permitan entender cual es el modelo que vamos a utilizar
basados en las estadísticas que se fueron generando en el proyecto.
Detalle de las estadísticas
En el cuadro anterior podemos observar las
estadísticas que hemos generado con los modelos para la predicción de los
empleos.
Nos damos cuenta de que el dataset con la menor
cantidad de datos no es el que nos genera los mejores resultados. Los dos
dataset que usan la selección de atributos utilizando las funciones de Python
nos dan mejores resultados a la hora de predecir la información.
Nos damos cuenta de que no siempre el uso del
criterio experto nos da los mejores resultados es mejor crear estudios un poco
más profundos para poder comprender mejor que atributos son los correctos para
mejorar las predicciones.
Código de Python https://github.com/jeanPython/jobbSalary/blob/master/Job%20Salary.ipynb
RegresarEtiquetas: bigdata, Data Analytics / Big Data, Datamining, Python