Sie sind auf Seite 1von 9

Informe Competencia Kaggle: Titanic

Andres Camilo Santacruz Borda - Diana Angulo Tavera - Andres Felipe Molina
ansantacruz@uan.edu.co - diaangulo@uan.edu.co andresfmolina@uan.edu.co
Presentado a: Ing. Ra
ul Ernesto Men
endez Mora
Facultad de Ingeniera de Sistemas y Computacion
Universidad Antonio Nari
no, Bogota, Colombia

1.

Introducci
on

Como parte de los ejercicios propuestos en el desarrollo de la asignatura


Inteligencia artificial, se realizo un aporte en la competencia Titanic del sitio
web Kaggle. Dicho aporte se poda realizar haciendo uso de distintos lenguajes
de programaci
on entre los cuales figuraban R y Python, quien fue en este caso
particular, el elegido por nosotros. Se elige Python como herramienta para el
desarrollo de la actividad, a causa de su facilidad de uso y robustas herramientas para la computaci
on cientfica y analisis de datos.
El IDE usado para el desarrollo del Script con el cual se realizara la intervenci
on en la competencia fue Spyder 2, que fue instalado con el paquete de
computaci
on cientfica basada en Python, Anaconda. (Ver Figura 1).

Figura 1. IDE Spyder

A continuaci
on se explicara detalladamente el codigo que conforma al Script
y la l
ogica usada para el desarrollo del ejercicio.

2.

Librerias

El paquete de Anaconda, instala automaticamente las principales libreras


de computaci
on cientfica y analisis de datos en el ordenador, por lo que no es
necesario, instalarlas manualmente.

import numpy as np
Numpy es un paquete desarrollado para Python y da soporte a grandes conjuntos de datos empaquetados en Arrays y matrices multidimensionales. Por
otra parte, tambien brinda herramientas concretas para operar entre arreglos
de datos. Esta herramienta se asemeja a Matlab debido a su facilidad de uso y
eficiencia en operaciones matriciales.

from pandas import DataFrame , Series


Panda es una biblioteca de herramientas escritas para Python y que tiene
como objetivo brindar soporte en procesos que estan relacionados con el analisis
de datos.
Para este caso particular, se requieren dos estructuras de datos especficas
de Panda; Series y DataFrame. La estructura de datos Series hace referencia a
Arrays unidimensionales que tienen un ndice para cada campo y la estructura
de Datos DataFrame hace referencia a un tipo de tablas similares a las usadas
en las bases de datos relacionales.

from sklearn . grid search import GridSearchCV


from sklearn . linear model import LogisticRegression
Scikit-learn es una biblioteca de Python enfocada al aprendizaje de maquina
o Machine Learning. Esta biblioteca cuenta con modulos orientados a la solucion
de los siguientes problemas:
Classification.
Regression.
Clustering.
Support vector machines.support vector machines.
Random forests.
Gradient boosting.

3.

Funciones
En el Script se cuenta con dos funciones:

def tipoDePersona ( nombre ):


for s in [Mr., Mrs., Miss., Dr., Sir.]:
if nombre .find(s) >= 0:
return True
return False
La primera de ellas, se llama tipoDePersona y recibe como parametro el nombre del pasajero que se esta analizando. Su objetivo es retornar un valor de true o
false en dependencia de si el nombre del pasajero cuenta con alg
un titulo de tipo:
Mr.
Mrs.
Miss.
Dr.
Sir.
La segunda funci
on se llama analisis y recibe como parametro, el conjunto
de datos de entrenamiento que para este caso tiene una extension .csv. Esta
funci
on es la encargada de preparar los datos para el aprendizaje por
lo que se explicara posteriormente. ]

def analisis ( dataSet ):

4.

Aprendizaje

En principio, para poder realizar el aprendizaje, es necesario cargar el conjunto de datos destinado al entrenamiento. Para ello se hace uso de la librera
importada pandas a quien se ha nombrado como pd. A continuacion se muestra
la linea de c
odigo encargada de leer el conjunto de datos:

dataSet = pd. read csv (.../ input/train.csv )


En la lectura y procesamiento se evidencia la utilidad de la estructura de
datos Series ya que toda la informacion del archivo se organiza en una tabla con
ndices tal como se muestra en la Figura 2:
Despues de tener cargado el conjunto de datos de entrenamiento, este se pasa
a la funci
on analisis. En esta funcion se estructura una tabla con las columnas
C0 , C1, C2, Genero, T itulo, P uerto. Los valores que pueden adoptar cada uno

Figura 2. Conjunto de datos entrenamiento impreso por consola

de los espacios de esta son 0, 5 y 0, 5.


El objetivo de la elaboracion de esta tabla, radica en la contextualizacion
del problema, es decir; ajustar la probabilidad de supervivencia de un individuo
dadas unas caractersticas determinadas. Por ejemplo: Si el individuo analizado
cuenta con un titulo en su nombre es probable que cuente con alg
un tipo de
preferencia al momento de evacuar la nave, as que se le asignara un valor de
0, 5 en el campo titulo. Por el contrario, si dicho individuo no cuenta con un
titulo en su nombre, es probable que no sea importante para el contexto social y
cultural por lo que no contara con una alta probabilidad de ser tenido en cuenta
en la evacuaci
on y el valor en el campo titulo sera de 0, 5.
A continuaci
on se explica el contenido de la funcion analisis y la logica usada
para la asignaci
on de los valores de cada columna.
# S e x => G e n e r o

genero fn = lambda x: 0.5 if x == male else 0.5


dataSet [Genero ] = df[Sex ]. map( genero fn )
Este fragmento de c
odigo eval
ua en el conjunto de datos si el sexo del individuo es f emale o male y asigna en el campo Genero un valor de 0, 5 solo si se esta
analizando a una mujer. Esta operacion tiene gran sentido ya que es de saberse,
que al momento de evacuar a las personas, las mujeres tuvieron prioridad sobre
los hombres.

# Name => T i t u l o

titulo fn = lambda x: 0.5 if tipoDePersona (x) else 0.5


titulo col = df[Name ]. map( titulo fn )
titulo col .name = Titulo
dfn = pd. concat ([df , titulo col ], axis =1)
Al igual que en el fragmento de codigo anterior, en este caso se esta verificando
si el nombre del individuo analizado contiene o no un titulo. Puede verse tambien, que para dicha verificacion se esta llamando a la funcion tipoDeP ersona().
Como se explico anteriormente, si el individuo cuenta con un titulo en el nombre
tiene prioridad en la evacuacion, por lo que su valor en el campo titulo es de 0, 5.
# Pclass

for i in range (3):


cls fn = lambda x: 0.5 if x == i + 1 else 0.5
dataSet [C %d % i] = df[Puerto ]. map( cls fn )
#

puerto
puerto
puerto
puerto
dfne =

col =( dfn. Pclass ==3). mul(dfn.Sex ==female )


fn = lambda x: 0.5 if x else 0.5
col = puerto col .map( puerto fn )
col .name=Puerto
pd. concat ([dfn , puerto col ],axis =1)

Estos dos bloques de c


odigo se encargan de asignar valores a los campos
P uerto y C0, C1, C2 en funcion del puerto donde abordo el individuo, la clase
en la que viaja, el genero y el titulo en su nombre. Finalmente, la tabla es organizada y es retornada junto a todos los valores de los individuos.

culumnas = [C0,C1,C2,Genero ,Titulo ,Puerto ]


return dfne[ culumnas ]
La variable mf d es la que almacena el retorno de la funcion analisis y es
quien da forma a la variable X quien representa el conjunto de rasgos del problema. La variable Y se conforma por la columna Survived del conjunto de datos.
Con esta operaci
on, se organiza la tabla a fin de proceder con la aplicacion de la
regresi
on logstica, que fue el algoritmo de aprendizaje elegido para el desarrollo
del ejercicio.

mdf = analisis ( dataSet )


X = mdf
Y = dataSet [Survived ]

Para el caso de sklearn.grids earch se usa el modulo GridSearchCV quien


se encarga de realizar b
usquedas sobre los valores de los parametros que se especifiquen en un estimador. Para este caso, los parametros son LogisticRegression
y cv.
LogisticRegression es el metodo con el cual se pretende realizar el aprendizaje
y necesita de dos par
ametros para su correcto funcionamiento. penalty especifica
la norma sobre la cual se quiere realizar la regularizacion de los datos a fin de
evitar Overfitting y Underfitting. Las normas existentes para la regularizaci
on son 2: l1 y l2.
La aplicaci
on de una u otra norma tiene resultados distintos, por lo que es importante elegir adecuadamente cual se va a usar. En http : //scikit learn.org/,
pagina oficial de la librera, se aconseja usar la norma l1 cuando los datos son
dispersos o multidimensionales y por el contrario, se aconseja el uso de de la
norma l2 para los datos que no estan dispersos. Para el caso particular de este
ejercicio, la tabla que se va a analizar y sobre la cual se va a ejecutar el aprendizaje es la producida por la funcion analisis por lo que la norma adecuada es l2.
Por otra parte, el metodo LogisticRegression hace uso de un segundo parametro;
solver.
solver tiene como funci
on, estipular el algoritmo con el cual se busca optimizar el problema. En la pagina web oficial de la librera, se exponen 4 tipos de
algoritmo y su recomendaci
on de uso:

Tabla 1. Uso recomendado de algoritmos de regularizaci


on
Algoritmos
de optimizaci
on
Uso
Algoritmo
recomendado
Para los problemas multiclase.
Solo
newton-cg
cuando se usa regularizaci
on l2
Para los problemas multiclase.
lbfgs
Solo cuando se usa regularizaci
on l2
liblinear Para los peque
nos conjuntos de datos.
Para grandes conjuntos de datos.
sag
Solo cuando se usa regularizaci
on l2

En este caso, el conjunto de datos es grande y se eligio l2 por lo que para el


par
ametro solver se elige el algoritmo sag.

clasificador = GridSearchCV ( LogisticRegression (

penalty =l2,solver =sag ), tuned parameters ,cv =10)


El ultimo comando de GridSearchCV es cv. Este comando hace referencia
a la validaci
on cruzada, que es una tecnica usada frecuentemente para evaluar
resultados en an
alisis estadstico y garantizar la independencia entre el conjunto
de datos de entrenamiento y prueba. El valor de 10 para este ejercicio se defini
o usando el metodo de prueba y error.
Finalmente, para culminar el apartado de aprendizaje, se ajusta el modelo a
los datos de entrenamiento.

clasificador .fit(X, Y)
Ya con lo anterior, se tiene el modelo listo para realizar aprendizaje. Ahora
sigue, cargar el conjunto de datos de prueba y ejecutar sobre el el modelo. La
lectura de este conjunto de datos se hace de la misma forma que el del conjunto
de entrenamiento.

prueba = pd. read csv (../ input/test.csv )


Posterior a la lectura del conjunto de datos de prueba, se debe hacer uso de
la funci
on analisis para obtener la tabla necesaria para ejecutar el aprendizaje.
A dicha tabla se le aplica el modelo de aprendizaje y el resultado sera guardado
en un arreglo con los valores de supervivencia. El codigo de esta operacion se
muestra a continuaci
on:

resultado = clasificador . predict ( analisis ( prueba ))


Como pudo evidenciarse anteriormente, el modelo de aprendizaje se llama
clasificador por lo que la tabla equivalente a los datos de prueba se enva como
par
ametro a la funci
on predict. Esta funcion ejecuta un proceso de prediccion
sobre los datos de prueba basada en los datos de entrenamiento.
El resultado de dichas predicciones, es almacenado en un arreglo unidimensional que para este caso se llama resultado.
Ahora, se hace necesario convertir ese arreglo en una tabla que posteriormente pueda ser guardada en formato .csv. Para ello de nuevo se hace uso de la
estructura de datos series. Como primer paso, se organiza a resultado verticalmente y se a
nade la columna que identifica a cada uno de los individuos. Esta
columna es extrada del conjunto de datos de prueba. Posterior a esto, a cada
columna se le asigna un nombre, la primera se llamara P assengerId y la segunda
Survived. P assengerId es la columna que identifica al individuo y Survived la
predicci
on de supervivencia realizada por el modelo. A continuacion se expone
el c
odigo encargado de realizar estas operaciones:

resultado = Series (res ,name=Survived ,index= test df .index)


resultado =pd. concat ([ prueba ,res],axis =1)
[[PassengerId ,Survived ]]
El comando que guarda al resultado como .csv es el siguiente:

resultador . to csv (out 1 lr.csv , index=False)

5.

Resultados

Despues de ejecutar el Script desarrollado, se obtiene un archivo .csv con las


predicciones realizadas. Este archivo es el que se debe subir en la plataforma
kaggle para evaluar la efectividad del modelo y aportar en la competencia.
Para subirlo, debe entrarse a la competencia y dirigirse al modulo Make a
submission. All se dispone de un boton que permite buscar el archivo en el
equipo. Al realizar todo este procedimiento, se muestra una tabla de posiciones
en donde puede verse el lugar ocupado en la competencia y el puntaje obtenido.
Para este caso, la posici
on obtenida en la competencia fue la competencia fue
la 2021 con un puntanje en las predicciones del 0,78469 sobre 1.(Ver Figura 3)

Figura 3. Tabla de resultados

6.

Conclusiones

Son muchas las cosas que se pueden concluir del ejercicio desarrollado y propuesto para la asignatura. En primer lugar se evidencio la importancia que juegan en el desarrollo academico y profesional de los participantes las plataformas
como Kaggle ya que motivan e impulsan el trabajo autonomo, y extracurricular.
Por otra parte, este tipo de iniciativas en el aula de clase permiten la exploraci
on de herramientas nuevas y potentes que tal vez no se han podido abarcar el

el desarrollo de la o las asignaturas. Para este caso particular, el aporte en la


competencia, conllevo a la investigacion y posterior uso de herramientas desconocidas y que pueden ser de gran utilidad en trabajos futuros sin importar si
son de ndole investigativa- academica o laboral.
Paralelamente, se comprobo que Python a pesar de ser un lenguaje cuyo uso
es relativamente sencillo e intuitivo, es una herramienta poderosa y robusta que
puede ser usada en diferentes contextos y a la vez obtener muy buenos resultados.
Finalmente y aunque no esta directamente relacionado con la actividad, se
concluye que existe una extensa variedad de herramientas computacionales para
el an
alisis de datos ya que indirectamente al usar Python como lenguaje, se contrasto el uso de este con las herramientas academicas de Octave y M atLab. Un
punto a destacar es que estas herramientas en su mayora son de uso libre lo que
quiere decir que pueden ser usadas en cualquier tipo de actividad sin necesidad
de incurrir el el pago de licencias, lo que a su vez significa una gran ventaja y
oportunidad a la producci
on de investigacion y desarrollo de aplicaciones que
aporten positivamente al desarrollo social y tecnologico.

Das könnte Ihnen auch gefallen