Plan De Estudios Para Aprender Data Science En Los Próximos 12 Meses
Jan 12, 202118 minutes read
Cómo habíamos hablado en un post anterior, estamos terminando 2020 y es hora de hacer planes para el próximo año, y uno de los planes y preguntas más importantes que debemos hacer es ¿que queremos estudiar?, ¿que queremos reforzar?, ¿qué cambios queremos hacer? y cual es el rumbo que vamos a tomar (o a seguir) en nuestras carreras profesionales.
Muchos de ustedes estarán empezando en el camino a convertirse en data scientist, de hecho puede que lo estén evaluando, ya que han escuchado mucho sobre el tema, pero tienen algunas dudas, por ejemplo acerca de la cantidad de ofertas laborales que puede existir en ésta área, dudas acerca de la tecnología en sí, y acerca del camino que deberían seguir, teniendo en cuenta la amplia gama de opciones para aprender.
Yo soy un partidario de que debemos aprender de varias fuentes, de varios mentores y de varios formatos. Con fuentes me refiero a las diferentes plataformas virtuales y presenciales que existen para estudiar. Por mentores me refiero a que siempre es una buena idea escuchar los diferentes puntos de vista y de enseñanza de diferentes profesores, y por formatos me refiero a las opciones entre libros, videos, clases, y otros formatos donde está contenida la información. Cuando extraemos información de todas estas fuentes reforzamos el conocimiento aprendido, pero siempre necesitamos una guía, y este post pretende dar algunas luces y estrategias prácticas al respecto.
Para decidir sobre las fuentes, los mentores y los formatos dependerá de ti escogerlos. Depende si prefieres material en español o en inglés, o si prefieres mezclarlos. También depende de tus gustos y facilidad de aprendizaje: por ejemplo, hay personas que se les da mejor aprender de libros, mientras que otros prefieren aprender de videos. Algunos prefieren estudiar en plataformas que son prácticas (con código en línea), y otros prefieren en plataformas tradicionales: como las de las universidades o MOOCs. Otros prefieren pagar por contenido de calidad, otros prefieren buscar solamente material gratuito. Es por ello que no daremos una recomendación en específico en este post, sino que daremos un plan de estudios.
Para iniciar debes tener en cuenta el tiempo que vas a dedicar a estudiar y la profundidad en el aprendizaje que puedes lograr, ya que si te encuentras sin trabajo podrías estar disponible a tiempo completo para estudiar, lo cual es una enorme ventaja. Mientras que si estás trabajando tendrás menos tiempo y deberás disciplinarte para poder disponer del tiempo en las noches, en las mañanas o los fines de semana. Finalmente, lo importante es cumplir la meta de aprender y quizás dedicar tu carrera profesional a esta apasionante área!
Dividiremos el año en trimestres de la siguiente manera
Primer Trimestre: Aprendiendo Las Bases
Segundo Trimestre: Subiendo El Nivel: Conocimientos Intermedios
Tercer Trimestre: El Proyecto Real - Un Proyecto Full-stack
Cuarto Trimestre: Buscando Oportunidades Mientras Se Mantiene la Práctica
Si quieres ser más estricto puedes tener fechas de inicio y terminación para este periodo de estudio de las bases. Podría ser algo como: Desde Enero 1 Hasta Marzo 30 de 2021 como fecha límite. Durante este periodo estudiarás lo siguiente:
Un lenguaje de programación que podrás aplicar a data science: Python o R.
Te recomendamos Python debido al simple hecho de que aproximadamente el 80% de las ofertas de trabajo en data science piden conocimientos en Python. Ese mismo porcentaje se mantiene con respecto a los proyectos reales que encontrarás implementados en producción. Y sumamos el hecho de que Python es multipropósito, así que no “perderás” tu tiempo si en algún momento decides enfocarte por ejemplo en desarrollo web, o de escritorio. Aquí podrás ver otros motivos por los que Python es el líder en data science. Este sería el primer tema a estudiar en los primeros meses del año.
Familiarizarte con estadística y matemáticas.
Existe un gran debate en la comunidad de data science alrededor de sí necesitamos estas bases o no las necesitamos. Escribiré un post más adelante sobre esto, pero la realidad es que SI lo necesitas, pero SOLO las bases (por lo menos al principio). Y quiero aclarar este punto antes de continuar.
Podríamos decir que data science se divide en dos grandes campos: Investigación y Desarrollo por un lado y poner algoritmos de Machine Learning en producción por el otro lado. Si usted más adelante decide enfocarse en Investigación y Desarrollo (Research), si va a necesitar matemáticas y estadística en profundidad (muy en profundidad). Si vas a irte por la parte práctica, las librerías te ayudarán a lidiar con la mayor parte de ello, bajo el capó. Cabe aclarar que la mayor cantidad de ofertas laborales, se encuentran en la parte práctica.
Para ambos casos, y en esta primera etapa solo necesitarás lo básico de:
Nota: Recomendamos que estudies primero Python antes de ver estadistica y matematicas, debido a que el reto es implementar estas bases estadísticas y matemáticas con Python. No busques tutoriales teóricos que muestran solo diapositivas o ejemplos estadísticos y/o matemáticos en Excel, ¡se vuelve muy aburrido y poco práctico! Deberías elegir un curso, programa o libro que te enseñe esos conceptos de forma práctica y con Python. Recuerda que Python es lo que finalmente empleamos, por ello necesitas elegir bien. Este consejo es clave para que no abandones en esta parte, ya que será la más densa y difícil.
Si tienes estas bases en los primeros tres meses, estarás listo para dar un salto de calidad en tu aprendizaje para los siguientes tres meses.
Segundo Trimestre: Subiendo El Nivel: Conocimientos Intermedios
Si quieres ser más estricto puedes tener fechas de inicio y terminación para este periodo de estudio en el nivel intermedio. Podría ser algo como: Desde Abril 1 hasta el 30 de Junio de 2021 como fecha límite.
Ahora que tienes unas buenas bases de programación, estadística y matemáticas, es hora de avanzar y conocer las grandes ventajas que tiene Python para aplicar análisis de datos. Para esta etapa estarás enfocado en:
Stack de Python para data science
Python tiene las siguientes librerías que debes de estudiar, conocer y practicar en esta etapa
Matplotlib y Seaborn: para hacer visualización de datos
Pandas es la librería in-facto para análisis de datos, es una de las herramientas más importantes (si no la más importante) y poderosas que debes de conocer y dominar durante tu carrera como data scientist. Pandas te facilitará enormemente la manipulación de datos, la limpieza y la organización de los mismos.
Feature Engineering
Muchas veces no se profundiza en el aprendizaje de la ingeniería de las características (o Feature Engineering), pero si quieres tener modelos de Machine Learning que hagan buenas predicciones y/o clasificaciones y mejorar los scores, dedicar un tiempo a esta materia es invaluable!
La ingeniería de características es el proceso de utilizar el conocimiento de los dominios para extraer características de los datos en bruto mediante técnicas de minería de datos. Estas características pueden utilizarse para mejorar el rendimiento de los algoritmos de aprendizaje automático. La ingeniería de características puede considerarse como el propio aprendizaje automático aplicado. Para lograr el objetivo de una buena ingeniería de características debes conocer las diferentes técnicas que existen, por tanto es una buena idea que al menos estudies las principales.
Modelos Básicos de Machine Learning
Finalizando esta etapa iniciarás con el estudio de Machine Learning. Este es quizás el momento más esperado! Aquí es donde empiezas a conocer los diferentes algoritmos que podrás utilizar, que problemas en particular puedes resolver y cómo puedes aplicarlos en la vida real.
La librería de Python que te recomendamos para empezar a experimentar con ML es: scikit-learn. Sin embargo es una buena idea que puedas encontrar tutoriales donde explican la implementación de los algoritmos (al menos los más sencillos) desde cero con Python, ya que la librería podría ser una “Caja negra” y podrías no entender lo que está sucediendo bajo el capó. Si aprendes a implementarlos con Python, podrás tener unas bases más sólidas.
Si implementas los algoritmos con Python (sin una librería), pondrás en práctica todo lo visto en la parte de estadística, matemática y de Pandas.
Estas son algunas recomendaciones de los algoritmos que al menos deberías conocer en esta etapa inicial
Aprendizaje supervisado
Regresión Lineal Simple
Regresion Lineal Multiple
K-nearest neighbors (KNN)
Regresion Logistica
Arboles de Decisión
Random Forest
Aprendizaje No Supervisado
K-Means
Bonus: si tienes el tiempo y estas dentro de los rangos de tiempo, puedes estudiar estos
Algoritmos Gradient Boosting
GBM
XGBoost
LightGBM
CatBoost
Nota: no te pases más de los 3 meses estipulados para esta etapa. Porque te estarás retrasando e incumpliendo con el plan de estudios. Todos tenemos falencias en esa etapa, es normal, sigue adelante y luego podrás retomar algunos conceptos que no entendiste en detalle. Lo importante es tener el conocimiento básico y avanzar!.
Si al menos logras estudiar los algoritmos mencionados de aprendizaje supervisado y no supervisado, tendrás una idea muy clara de lo que podrás hacer en el futuro. Así que no te preocupes por abarcarlo todo, recuerda que es un proceso, y lo ideal es que tengas unos tiempos claramente establecidos para que no te frustres y sientas que estás avanzando.
Hasta aquí llega tu estudio “teórico” de las bases de un Data Scientist, que de hecho se ha especializado como Machine Learning Engineer. Ahora seguiremos con la parte práctica!
Tercer Trimestre: El Proyecto Real - Un Proyecto Full-stack
Si quieres ser más estricto puedes tener fechas de inicio y terminación para este periodo de estudio en el nivel intermedio. Podría ser algo como: Desde Julio 1 hasta el 30 de Septiembre de 2021 como fecha límite.
Ahora que tienes unas buenas bases de programación, estadística, matemáticas, análisis de datos y de algoritmos de machine learning, es hora de avanzar y poner en práctica real todos estos conocimientos.
Muchas de estas sugerencias podrían sonar fuera de lo común, pero creeme que harán una gran diferencia en tu carrera como data scientist.
Lo primero es crear tu presencia web:
Crea una cuenta en Github (o GitLab), y aprende Git. Poder manejar diferentes versiones de tu código es importante, deberías tener un control de versiones sobre los mismos, por no decir que tener una cuenta de Github activa es muy valiosa para demostrar tus verdaderas habilidades. En Github también podrás montar tus Jupyter Notebooks y hacerlos públicos, así demuestras también tus habilidades. Este es el mío por ejemplo: https://github.com/danielmoralesp
Aprende lo básico de programación web. La ventaja es que ya tienes Python como una habilidad, por tanto puedes aprender Flask para crear una página web sencilla. O puedes usar algún motor de templates como Github Pages, Ghost o el mismo Wordpress y crear así tu portafolio en línea.
Compra un dominio con tu nombre. Algo como minombre.com, minombre.co, minombre.dev, etc. Esto es valiosísimo para que puedas tener tu CV online y lo actualices con tus proyectos. Allí podrás hacer una gran diferencia, mostrando tus proyectos, tus Jupyter Notebooks y dejando ver que tienes las habilidades prácticas para ejecutar proyectos en esta área. Existen muchos templates front-end para que adquieras gratis o de pago, y le des un look más personalizado y agradable. No uses subdominios gratuitos de Wordpress, Github o Wix, se ve muy poco profesional, haz el tuyo propio. Aqui esta el mío por ejemplo: https://www.danielmorales.co/
Monta todos los ejercicios y proyectos que has hecho hasta ahora, en los 6 meses previos, a tu portafolio en línea. Ya tienes material para darte a conocer, no importa que tan profesionales luzcan tu Jupyter Notebooks, trata de arregarlos un poco y móntalos. Mis Jupyter Notebooks por ahora los estoy montando de forma privada aqui: https://www.narrativetext.co/
Elige un proyecto que te apasione y crea un modelo de Machine Learning a su alrededor.
El objetivo final de este tercer trimestre es crear UN ÚNICO proyecto, que a ti te apasione, y que sea ÚNICO entre los demás. Resulta que en la comunidad existen muchos proyectos típicos, como predecir los Sobrevivientes del Titanic, o predecir el precio de las Casas en Boston. Ese tipo de proyectos son buenos para aprender, pero no lo son para demostrarlos como tus proyectos ÚNICOS.
Si te apasiona el deporte, trata de predecir los resultados de fútbol de tu liga local. Si te apasionan las finanzas, trata de predecir los precios de las acciones de la bolsa de valores de tu país. Si te apasiona el marketing, trata de buscar a alguien que tenga un e-commerce e implementa un algoritmo de recomendación de productos y súbelo a producción. Si te apasionan los negocios: haz un predictor de las mejores ideas de negocio para 2021.
Como vez en este caso estas limitado por tus pasiones y por tu imaginación. De hecho esas son las dos claves para que hagas este proyecto: Pasión e Imaginación.
Sin embargo no esperes hacer dinero de ello, estás en una etapa de aprendizaje, necesitas que ese algoritmo esté montado en producción, haz una API en Flask con ella, y explica en tu sitio web como lo hiciste y cómo la gente puede acceder a él. Este es el momento de brillar, y a la vez es el momento de mayor aprendizaje.
Muy seguramente te encontrarás con obstáculos, si tu algoritmo da un 60% de Accuracy después de un gran esfuerzo de optimización, no importa, termina todo el proceso completo, súbelo a producción, trata de que algún amigo o familiar lo use, y ése será el objetivo cumplido para esta etapa: Hacer un proyecto Full-stack de Machine Learning.
Con full-stack me refiero que tu hiciste todos los siguientes pasos:
Obtuviste los datos de alguna parte (scrapping, open data o API)
Hiciste un análisis de datos
Limpiaste y transformaste los datos
Creaste Modelos de Machine Learning
Subiste el mejor modelo a producción para que otras personas lo usen.
Esto no significa que todo este proceso es lo que harás siempre en tu trabajo, pero significa que conocerás cada una de las partes del pipeline que se necesita para un proyecto de data science para una empresa. Tendrás una perspectiva única!
Cuarto Trimestre: Buscando Oportunidades Mientras Se Mantiene la Práctica
Si quieres ser más estricto puedes tener fechas de inicio y terminación para este periodo de estudio en el nivel intermedio. Podría ser algo como: Desde Octubre 1 hasta el 31 de Diciembre de 2021 como fecha límite.
Ahora tienes conocimientos teóricos y prácticos. Has implementado un modelo en producción. El paso siguiente depende de ti y de tu personalidad. Digamos que eres alguien emprendedor, y tienes la visión de crear algo nuevo a partir de algo que descubriste o que viste una oportunidad de hacer negocio con esta disciplina, así que es el momento de empezar a planear cómo hacerlo. Si ese es el caso, obviamente este post no abarcara ese proceso, pero tu deberías de saber cuales podrán ser los pasos a seguir (o empezar a averiguarlos).
"No vas a conseguir trabajo tan rápido como piensas, si sigues pensando de la misma forma". Autor
Resulta que todas las personas que inician como data scientists se imaginan trabajando para las grandes empresas de su país o de su región. O incluso remoto. Resulta que si aspiras a trabajar en una empresa grande como data scientist te vas a frustrar al ver los años de experiencia que piden (3 o más años) y las habilidades que solicitan.
Las grandes empresas no contratan Juniors (o muy pocas lo hacen), precisamente porque ya son grandes empresas. Tienen el músculo financiero para exigir experiencia y habilidades y pueden pagar un salario acorde (aunque no siempre es el caso). El tema es que si te enfocas allí te vas a frustrar!.
Aquí debemos volver a lo siguiente: "Necesitas creatividad para conseguir un trabajo en data science".
Como todo en la vida debemos empezar en diferentes escalones, en este caso, desde el principio. Aquí están los escenarios
Si estás trabajando en una empresa y en un rol no relacionado con ingeniería debes demostrar tus nuevas habilidades a la empresa en la que trabajas. Si por ejemplo trabajas en el área de servicio al cliente, deberías aplicarlo a tu trabajo, y hacer por ejemplo, análisis detallados de tus llamadas, de los porcentajes de conversión, almacenar la data y hacer predicciones sobre ella! Si puedes tener datos de tus compañeros, ¡podrías tratar de predecir las ventas de ellos! Esto puede sonar gracioso, pero se trata de que tan creativamente puedes aplicar data science a tu actual trabajo y cómo demostrarle a tus jefes lo valioso que es y EVANGELIZARLOS acerca de los beneficios de la implementación. Te harás notar y seguramente podrían crear un nuevo departamento o puesto de trabajo relacionado con data. Y tu ya tienes el conocimiento y la experiencia. La palabra clave aquí es Evangelizar. Muchas empresas y empresarios apenas estan empezando a ver el poder de esta disciplina, y es tu tarea alimentar esa realidad.
Si estás trabajando en un área relacionada con ingeniería, pero que no es data science. Aquí aplica lo mismo del ejemplo anterior, solo que tienes algunas ventajas, y es que podrías acceder a la data de la empresa, y podrías usarla a beneficio de la empresa, haciendo análisis y/o predicciones sobre la misma, y nuevamente EVANGELIZAR a tus jefes tus nuevas habilidades y de los beneficios del data science.
Si estás desempleado (o no quieres o no te sientes a gusto siguiendo los dos ejemplos anteriores), puedes empezar a buscar por fuera, y lo que te recomiendo es que busques emprendimientos y/o startups de tecnología donde apenas están formando los primeros equipos y que estén pagando algún salario, o incluso tengan opciones sobre acciones de la empresa. Obviamente aquí los salarios no serán exorbitantes, y los horarios de trabajo podrían ser más extensos, pero recuerda que estás en la etapa de aprendizaje y práctica (apenas en el primer escalón), por tanto no puedes exigir, debes aterrizar un poco las expectativas y acoplarte a esa realidad, y dejar de pretender que te paguen 10.000 dólares al mes en esta etapa. Pero 1.000 dólares si podría ser algo muy interesante para iniciar esta nueva carrera. Recuerda, eres un Junior en esta etapa.
La conclusión es: no pierdas el tiempo viendo y/o aplicando a ofertas de grandes empresas, porque te vas a frustrar. Se creativo, y busca oportunidades en empresas más pequeñas o recién creadas.
El aprendizaje nunca se detiene
Mientras estás en ese proceso de búsqueda de trabajo o de oportunidades, la cual podría tomarte la mitad de tu tiempo (50% buscando oportunidades, 50% seguir estudiando), tienes que seguir aprendiendo, deberías avanzar a conceptos tales como Deep Learning, Data Engineer u otros temas que sientes quedaron flojos de las etapas pasadas o enfocandote en los temas que te apasionen dentro de este grupo de disciplinas en data science.
Al mismo tiempo puedes elegir un segundo proyecto, y dedicarle un tiempo a ejecutarlo de principio a fin, y asi aumentar tu portafolio y tu experiencia. Si éste es el caso, trata de buscar un proyecto completamente diferente: si el primero lo hiciste con Machine Learning, que este segundo sea con Deep learning. Si el primero lo montaste a producción en la web, que este segundo lo montes a una plataforma móvil. Recuerda, la clave es la creatividad!
Conclusion
Estamos en un momento ideal para planear 2021, y si éste es el camino que quieres tomar, empieza a buscar las plataformas y los medios por los que quieres estudiar. ¡Ponte manos a la obra y no dejes pasar esta oportunidad de convertirte en data scientist en el 2021!
Si estas interesad@ tengo este portafolio de cursos prácticos en data science, ojalá puedas tomarlo y te enseñaré más en detalle cómo lograr este objetivo para el 2021
CréditosLos modelos predictivos se han convertido en un asesor de confianza para muchas empresas y por una buena razón. Estos modelos pueden "prever el futuro", y hay muchos métodos diferentes disponibles, lo que significa que cualquier industria puede encontrar uno que se ajuste a sus retos particulares.Cuando hablamos de modelos predictivos, nos referimos a un modelo de regresión (salida continua) o a un modelo de clasificación (salida nominal o binaria). En los problemas de clasificación, utilizamos dos tipos de algoritmos (dependiendo del tipo de salida que este crea):Salida de clase: Algoritmos como Support Vector Machine y K Nearest Neighbors crean una salida de clase. Por ejemplo, en un problema de clasificación binaria, las salidas serán 0 o 1. Sin embargo, hoy en día tenemos algoritmos que pueden convertir estas salidas de clase en probabilidad.Salida de probabilidad: Algoritmos como la Regresión Logística, el Bosque Aleatorio, potenciación del Gradiente, el Adaboost, etc. dan salidas de probabilidad. Convertir las salidas de probabilidad en salidas de clase es sólo cuestión de crear un umbral de probabilidadPuedes leer más artículos de Data Science en español aquí Lea también:Tipos Claves De Regresiones: ¿Cuál Usar?IntroducciónSi bien la preparación de los datos y el entrenamiento de un modelo de aprendizaje de máquina es un paso clave en el proceso de aprendizaje automático, es igualmente importante medir el rendimiento de este modelo entrenado. Lo bien que el modelo generaliza sobre los datos no vistos es lo que define los modelos de aprendizaje automático adaptables frente a los no adaptables.Al utilizar diferentes métricas para la evaluación del rendimiento, deberíamos estar en posición de mejorar el poder de predicción general de nuestro modelo antes de que lo pongamos en marcha para la producción sobre datos no vistos antes.Si no se realiza una evaluación adecuada del modelo aprendizaje automático utilizando diferentes métricas, y se usa sólo la precisión, puede darse un problema cuando el modelo respectivo se despliega sobre datos no vistos y puede dar lugar a malas predicciones.Esto sucede porque, en casos como éste, nuestros modelos no aprenden sino que memorizan; por lo tanto, no pueden generalizar bien sobre datos no vistos.Métricas de evaluación del modeloDefinamos ahora las métricas de evaluación para valorar el rendimiento de un modelo de aprendizaje automático, que es un componente integral de cualquier proyecto de ciencia de los datos. Su objetivo es estimar la precisión de la generalización de un modelo sobre los datos futuros (no vistos/fuera de muestra).Matriz de confusiónUna matriz de confusión es una representación matricial de los resultados de las predicciones de cualquier prueba binaria que se utiliza a menudo para describir el rendimiento del modelo de clasificación (o "clasificador") sobre un conjunto de datos de prueba cuyos valores reales se conocen.La matriz de confusión es relativamente sencilla de comprender, pero la terminología relacionada puede ser confusa.Matriz de confusión con 2 etiquetas de clase.Cada predicción puede ser uno de cuatro resultados, basado en cómo coincide con el valor real:Verdadero Positivo (TP): Predicho Verdadero y Verdadero en realidad.Verdadero Negativo (TN): Predicho Falso y Falso en realidad.Falso Positivo (FP): Predicción de verdadero y falso en la realidad.Falso Negativo (FN): Predicción de falso y verdadero en la realidad.Ahora entendamos este concepto usando la prueba de hipótesis.Lea también:Falsos Positivos Vs. Falsos Negativos Una hipótesis es una especulación o teoría basada en pruebas insuficientes que se presta a más pruebas y experimentación. Con más pruebas, una hipótesis puede ser probada como verdadera o falsa.Una Hipótesis Nula es una hipótesis que dice que no hay significancia estadística entre las dos variables de la hipótesis. Es la hipótesis que el investigador está tratando de refutar.Siempre rechazamos la hipótesis nula cuando es falsa, y aceptamos la hipótesis nula cuando es realmente verdadera.Aunque las pruebas de hipótesis se supone que son fiables, hay dos tipos de errores que pueden ocurrir.Estos errores se conocen como errores de Tipo I y Tipo II.Por ejemplo, cuando se examina la eficacia de una droga, la hipótesis nula sería que la droga no afecta a una enfermedad.Error de Tipo I: equivalente a los Falsos Positivos(FP).El primer tipo de error posible implica el rechazo de una hipótesis nula que es verdadera.Volvamos al ejemplo de una droga que se utiliza para tratar una enfermedad. Si rechazamos la hipótesis nula en esta situación, entonces afirmamos que la droga tiene algún efecto sobre una enfermedad. Pero si la hipótesis nula es cierta, entonces, en realidad, la droga no combate la enfermedad en absoluto. Se afirma falsamente que la droga tiene un efecto positivo en una enfermedad.Error de tipo II:- equivalente a Falsos Negativos(FN).El otro tipo de error que ocurre cuando aceptamos una hipótesis falsa nula. Este tipo de error se llama error de tipo II y también se conoce como error de segundo tipo.Si pensamos de nuevo en el escenario en el que estamos probando una droga, ¿cómo sería un error de tipo II? Un error de tipo II ocurriría si aceptáramos que la droga no tiene efecto sobre la enfermedad, pero en realidad, sí lo tiene.Un ejemplo de la implementación Python de la matriz de confusión.Puedes leer más artículos de Data Science en español aquí import warningsimport pandas as pdfrom sklearn import model_selectionfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import confusion_matriximport matplotlib.pyplot as plt%matplotlib inline #ignore warningswarnings.filterwarnings('ignore')# Load digits dataseturl = "http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"df = pd.read_csv(url)# df = df.valuesX = df.iloc[:,0:4]y = df.iloc[:,4]#test sizetest_size = 0.33#generate the same set of random numbersseed = 7#Split data into train and test set. X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=test_size, random_state=seed)#Train Modelmodel = LogisticRegression()model.fit(X_train, y_train)pred = model.predict(X_test)#Construct the Confusion Matrixlabels = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']cm = confusion_matrix(y_test, pred, labels)print(cm)fig = plt.figure()ax = fig.add_subplot(111)cax = ax.matshow(cm)plt.title('Confusion matrix')fig.colorbar(cax)ax.set_xticklabels([''] + labels)ax.set_yticklabels([''] + labels)plt.xlabel('Predicted Values')plt.ylabel('Actual Values')plt.show()Matriz de confusión con 3 etiquetas de clase.Los elementos diagonales representan el número de puntos para los cuales la etiqueta predicha es igual a la etiqueta verdadera, mientras que cualquier cosa fuera de la diagonal fue mal etiquetada por el clasificador. Por lo tanto, cuanto más altos sean los valores diagonales de la matriz de confusión, mejor, indicando muchas predicciones correctas.En nuestro caso, el clasificador predijo perfectamente las 13 plantas de setosa y 18 de virginica en los datos de prueba. Sin embargo, clasificó incorrectamente 4 de las plantas versicolor como virginica.También hay una lista de tasas que a menudo se calculan a partir de una matriz de confusión para un clasificador binario:1. ExactitudEn general, ¿con qué frecuencia es correcto el clasificador?Exactitud = (TP+TN)/totalCuando nuestras clases son aproximadamente iguales en tamaño, podemos usar la precisión, que nos dará valores clasificados correctamente.La precisión es una métrica de evaluación común para los problemas de clasificación. Es el número de predicciones correctas hechas como una proporción de todas las predicciones hechas.Tasa de clasificación errónea (Tasa de error): En general, con qué frecuencia se equivoca. Dado que la exactitud es el porcentaje que clasificamos correctamente (tasa de éxito), se deduce que nuestra tasa de error (el porcentaje en que nos equivocamos) puede calcularse de la siguiente manera:Tasa de clasificación errónea = (FP+FN)/total#import modulesimport warningsimport pandas as pdimport numpy as npfrom sklearn import model_selectionfrom sklearn.linear_model import LogisticRegressionfrom sklearn import datasetsfrom sklearn.metrics import accuracy_score#ignore warningswarnings.filterwarnings('ignore')# Load digits datasetiris = datasets.load_iris()# # Create feature matrixX = iris.data# Create target vectory = iris.target#test sizetest_size = 0.33#generate the same set of random numbersseed = 7#cross-validation settingskfold = model_selection.KFold(n_splits=10, random_state=seed)#Model instancemodel = LogisticRegression()#Evaluate model performancescoring = 'accuracy'results = model_selection.cross_val_score(model, X, y, cv=kfold, scoring=scoring)print('Accuracy -val set: %.2f%% (%.2f)' % (results.mean()*100, results.std()))#split dataX_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=test_size, random_state=seed)#fit modelmodel.fit(X_train, y_train)#accuracy on test setresult = model.score(X_test, y_test)print("Accuracy - test set: %.2f%%" % (result*100.0))La precisión de la clasificación es del 88% en el conjunto de validación.2. PrecisiónCuando predice sí, ¿con qué frecuencia es correcto?Precisión=TP/predicciones síCuando tenemos un desequilibrio de clase, la precisión puede convertirse en una métrica poco fiable para medir nuestro desempeño. Por ejemplo, si tuviéramos una división de 99/1 entre dos clases, A y B, donde el evento raro, B, es nuestra clase positiva, podríamos construir un modelo que fuera 99% exacto con sólo decir que todo pertenece a la clase A. Claramente, no deberíamos molestarnos en construir un modelo si no hace nada para identificar la clase B; por lo tanto, necesitamos diferentes métricas que desalienten este comportamiento. Para ello, utilizamos la precisión y la sensibilidad en lugar de la exactitud.Puedes leer más artículos de Data Science en español aquí 3. ExhaustividadCuando en realidad es un sí, ¿con qué frecuencia predice un sí?Tasa positiva verdadera = TP/Si realesLa Exhaustividad nos da la tasa positiva verdadera (TPR), que es la proporción de los verdaderos positivos a todo lo positivo.En el caso de la división 99/1 entre las clases A y B, el modelo que clasifica todo como A tendría una exhaustividad del 0% para la clase positiva, B (la precisión sería indefinida - 0/0). La exhaustividad proporciona una mejor manera de evaluar el rendimiento del modelo ante un desequilibrio de clases. Nos dirá correctamente que el modelo tiene poco valor para nuestro caso de uso.Al igual que la exactitud, tanto la precisión como la exhaustividad son fáciles de calcular y comprender, pero requieren umbrales. Además, la precisión y la exhaustividad sólo consideran la mitad de la matriz de confusión:4. Puntuación F1La puntuación F1 es la media armónica de la precisión y exhaustividad, donde la puntuación de la F1 alcanza su mejor valor en 1 (precisión y exhaustividad perfectas) y el peor en 0.¿Por qué la media armónica? Dado que la media armónica de una lista de números se inclina fuertemente hacia últimos elementos de la lista, tiende (en comparación con la media aritmética) a mitigar el impacto de los grandes valores atípicos y a agravar el impacto de los pequeños.Una puntuación F1 castiga más los valores extremos. Idealmente, un puntaje F1 podría ser una métrica de evaluación efectiva en los siguientes escenarios de clasificación:Cuando los Falsos Positivos y la Falsos Negativos son igualmente costosos - lo que significa que se pasan verdaderos positivos o se encuentran falsos positivos - ambos impactan el modelo casi de la misma manera, como en nuestro ejemplo de clasificación de detección de cáncerAñadir más datos no cambia el resultado de manera efectivaLa TN es alta (como en las predicciones de inundaciones, predicciones de cáncer, etc.)Un ejemplo de implementación en Python de la puntuación F1.import warningsimport pandasfrom sklearn import model_selectionfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import log_lossfrom sklearn.metrics import precision_recall_fscore_support as score, precision_score, recall_score, f1_scorewarnings.filterwarnings('ignore')url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"dataframe = pandas.read_csv(url)dat = dataframe.valuesX = dat[:,:-1]y = dat[:,-1]test_size = 0.33seed = 7model = LogisticRegression()#split dataX_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=test_size, random_state=seed)model.fit(X_train, y_train)precision = precision_score(y_test, pred)print('Precision: %f' % precision)# recall: tp / (tp + fn)recall = recall_score(y_test, pred)print('Recall: %f' % recall)# f1: tp / (tp + fp + fn)f1 = f1_score(y_test, pred)print('F1 score: %f' % f1)Puedes leer más artículos de Data Science en español aquí 5. EspecificidadCuando es no, ¿con qué frecuencia predice el no?Tasa negativa real = TN/no realEs la verdadera tasa negativa o la proporción de verdaderos negativos a todo lo que debería haber sido clasificado como negativo.Obsérvese que, en conjunto, la especificidad y la sensibilidad consideran la matriz de confusión completa:6. Curva de características operativas del receptor (ROC)Medir el área bajo la curva ROC es también un método muy útil para evaluar un modelo. Al trazar la tasa positiva verdadera (sensibilidad) frente a la tasa de falsos positivos (1 - especificidad), obtenemos la curva de Característica Operativa del Receptor (ROC). Esta curva nos permite visualizar el equilibrio entre la tasa de verdaderos positivos y la tasa falsos positivosLos siguientes son ejemplos de buenas curvas ROC. La línea discontinua sería una suposición aleatoria (sin valor predictivo) y se utiliza como línea de base; cualquier cosa por debajo de eso se considera peor que una suposición. Queremos estar hacia la esquina superior izquierda:Una ejemplo de implementación en Python de las curvas ROC#Classification Area under curveimport warningsimport pandasfrom sklearn import model_selectionfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import roc_auc_score, roc_curvewarnings.filterwarnings('ignore')url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"dataframe = pandas.read_csv(url)dat = dataframe.valuesX = dat[:,:-1]y = dat[:,-1]seed = 7#split dataX_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=test_size, random_state=seed)model.fit(X_train, y_train)# predict probabilitiesprobs = model.predict_proba(X_test)# keep probabilities for the positive outcome onlyprobs = probs[:, 1]auc = roc_auc_score(y_test, probs)print('AUC - Test Set: %.2f%%' % (auc*100))# calculate roc curvefpr, tpr, thresholds = roc_curve(y_test, probs)# plot no skillplt.plot([0, 1], [0, 1], linestyle='--')# plot the roc curve for the modelplt.plot(fpr, tpr, marker='.')plt.xlabel('False positive rate')plt.ylabel('Sensitivity/ Recall')# show the plotplt.show()En el ejemplo anterior, la AUC está relativamente cerca de 1 y es mayor de 0,5. Un clasificador perfecto hará que la curva ROC vaya a lo largo del eje Y y luego a lo largo del eje X.7. Pérdida logarítmicaLa pérdida logarítmica es la métrica de clasificación más importante basada en probabilidades.A medida que la probabilidad predicha de la clase verdadera se acerca a cero, la pérdida aumenta exponencialmente:Mide el desempeño de un modelo de clasificación en el que la entrada de la predicción es un valor de probabilidad entre 0 y 1. La pérdida logarítmica aumenta a medida que la probabilidad predicha se aleja de la etiqueta real. El objetivo de cualquier modelo de aprendizaje automático es minimizar este valor. Por lo tanto, una pérdida logarítmica menor es mejor, con un modelo perfecto teniendo una pérdida logarítmica de 0.Una muestra de la implementación en Python de la pérdida logarítmica#Classification LogLossimport warningsimport pandasfrom sklearn import model_selectionfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import log_losswarnings.filterwarnings('ignore')url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"dataframe = pandas.read_csv(url)dat = dataframe.valuesX = dat[:,:-1]y = dat[:,-1]seed = 7#split dataX_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=test_size, random_state=seed)model.fit(X_train, y_train)#predict and compute loglosspred = model.predict(X_test)accuracy = log_loss(y_test, pred)print("Logloss: %.2f" % (accuracy))Logloss: 8.02Puedes leer más artículos de Data Science en español aquí 8. Índice JaccardEl índice Jaccard es una de las formas más simples de calcular y averiguar la exactitud de un modelo de clasificación de aprendizaje automático. Entendamoslo con un ejemplo. Supongamos que tenemos un conjunto de pruebas etiquetadas, con etiquetas como -y = [0,0,0,0,0,1,1,1,1,1]Y nuestro modelo ha predicho las etiquetas como…y1 = [1,1,0,0,0,1,1,1,1,1]El anterior diagrama de Venn nos muestra las etiquetas del conjunto de pruebas y las etiquetas de las predicciones, y su intersección y unión.El índice Jaccard o coeficiente de similitud Jaccard es una estadística utilizada para comprender las similitudes entre los conjuntos de muestras. La medición enfatiza la similitud entre conjuntos de muestras finitas y se define formalmente como el tamaño de la intersección dividido por el tamaño de la unión de los dos conjuntos etiquetados, con la fórmula como -Índice Jaccard o Intersección sobre Unión(IoU)Así, para nuestro ejemplo, podemos ver que la intersección de los dos conjuntos es igual a 8 (ya que ocho valores se predicen correctamente) y la unión es 10 + 10-8 = 12. Por lo tanto, el índice Jaccard nos da la precisión como -Así que la precisión de nuestro modelo, según el índice Jaccard, se convierte en 0.66, o 66%.Cuanto mayor sea el índice Jaccard, mayor será la precisión del clasificador.Una muestra de implementación en Python del índice Jaccard.import numpy as npdef compute_jaccard_similarity_score(x, y): intersection_cardinality = len(set(x).intersection(set(y))) union_cardinality = len(set(x).union(set(y))) return intersection_cardinality / float(union_cardinality)score = compute_jaccard_similarity_score(np.array([0, 1, 2, 5, 6]), np.array([0, 2, 3, 5, 7, 9]))print "Jaccard Similarity Score : %s" %scorepassPuntaje de similitud Jaccard: 0.3759. Gráfico de Kolmogorov SmirnovEl gráfico K-S o Kolmogorov-Smirnov mide el rendimiento de los modelos de clasificación. Más exactamente, K-S es una medida del grado de separación entre las distribuciones positivas y negativas.La frecuencia acumulativa de las distribuciones observadas y de las hipótesis se traza en relación con las frecuencias ordenadas. La doble flecha vertical indica la máxima diferencia vertical.La K-S es 100 si las puntuaciones dividen la población en dos grupos separados en los que un grupo contiene todos los positivos y el otro todos los negativos. Por otra parte, si el modelo no puede diferenciar entre los positivos y los negativos, entonces es como si el modelo seleccionara casos al azar de la población. El K-S sería 0.En la mayoría de los modelos de clasificación la K-S caerá entre 0 y 100, y cuanto más alto sea el valor mejor será el modelo para separar los casos positivos de los negativos.La K-S también puede utilizarse para comprobar si dos distribuciones de probabilidad unidimensionales subyacentes difieren. Es una forma muy eficiente de determinar si dos muestras son significativamente diferentes entre sí.Un ejemplo de la implementación en Python del Kolmogorov-Smirnov.from scipy.stats import kstest import random # N = int(input("Enter number of random numbers: ")) N = 10 actual =[] print("Enter outcomes: ") for i in range(N): # x = float(input("Outcomes of class "+str(i + 1)+": ")) actual.append(random.random()) print(actual) x = kstest(actual, "norm") print(x)La hipótesis nula utilizada aquí asume que los números siguen la distribución normal. Devuelve estadísticas y valor p. Si el valor p es < alfa, rechazamos la hipótesis Nula.Alfa se define como la probabilidad de rechazar la hipótesis nula dado que la hipótesis nula(H0) es verdadera. Para la mayoría de las aplicaciones prácticas, se elige alfa como 0,05.Puedes leer más artículos de Data Science en español aquí 10. Gráfico de ganancia y elevaciónLa ganancia o el levantamiento es una medida de la eficacia de un modelo de clasificación calculado como la relación entre los resultados obtenidos con y sin el modelo. Los gráficos de ganancia y elevación son ayudas visuales para evaluar el rendimiento de los modelos de clasificación. Sin embargo, en contraste con la matriz de confusión que evalúa los modelos en toda la población, el gráfico de ganancia o elevación evalúa el rendimiento del modelo en una porción de la población.Cuanto mayor sea la elevación (es decir, cuanto más lejos esté de la línea de base), mejor será el modelo.El siguiente gráfico de ganancias, ejecutado en un conjunto de validación, muestra que con el 50% de los datos, el modelo contiene el 90% de los objetivos, la adición de más datos añade un aumento insignificante en el porcentaje de objetivos incluidos en el modelo.Gráfico de ganancia/elevaciónLos gráficos de elevación suelen presentarse como un gráfico de ascenso acumulativo, que también se conoce como gráfico de ganancias. Por lo tanto, los gráficos de ganancias a veces se denominan (quizás de forma confusa) "gráficos de elevación", pero son más exactos como gráficos de ascenso acumulativo.Uno de sus usos más comunes es en el marketing, para decidir si vale la pena llamar a un posible cliente.11. Coeficiente de GiniEl coeficiente de Gini o Índice de Gini es una métrica popular para los valores de clase desequilibrados. El coeficiente oscila entre 0 y 1, donde 0 representa la igualdad perfecta y 1 la desigualdad perfecta. Aquí, si el valor de un índice es mayor, entonces los datos estarán más dispersos.El coeficiente de Gini puede calcularse a partir del área bajo la curva ROC usando la siguiente fórmula:Coeficiente de Gini = (2 * curva_ROC) - 1Puedes leer más artículos de Data Science en español aquí ConclusiónComprender lo bien que un modelo de aprendizaje automático va a funcionar con datos no vistos es el propósito final de trabajar con estas métricas de evaluación. Métricas como la exactitud, la precisión, la exhaustividad son buenas formas de evaluar los modelos de clasificación para conjuntos de datos equilibrados, pero si los datos están desequilibrados y hay una disparidad de clases, entonces otros métodos como el ROC/AUC, el coeficiente de Gini funcionan mejor en la evaluación del rendimiento del modelo.Bueno, esto concluye este artículo. Espero que hayan disfrutado de su lectura, no duden en compartir sus comentarios/pensamientos/opiniones en la sección de comentarios.Gracias por leerlo!!!
Juan Guillermo Gómez Ramírez
Jan 12, 2021
Join our private community in Discord
Keep up to date by participating in our global community of data scientists and AI enthusiasts. We discuss the latest developments in data science competitions, new techniques for solving complex challenges, AI and machine learning models, and much more!