Data Science Engineer at DataSource.ai
La popularidad de la ciencia de los datos atrae a muchas personas de una amplia gama de profesiones para hacer un cambio de carrera con el objetivo de convertirse en un científico de datos.A pesar de la gran demanda de científicos de datos, es una tarea muy difícil encontrar tu primer trabajo. A menos que tengas una sólida experiencia laboral previa, las entrevistas son el lugar donde puedes mostrar tus habilidades e impresionar a tu potencial empleador.La ciencia de los datos es un campo interdisciplinar que abarca una amplia gama de temas y conceptos. Por ello, el número de preguntas que te pueden hacer en una entrevista es muy elevado.Sin embargo, hay algunas preguntas sobre los fundamentos de la ciencia de los datos y el aprendizaje automático. Éstas son las que no debes perderte. En este artículo, repasaremos 10 preguntas que probablemente se hagan en una entrevista a un científico de datos.Las preguntas están agrupadas en 3 categorías principales que son aprendizaje automático, Python y SQL. Intentaré dar una breve respuesta a cada pregunta. Sin embargo, sugiero leer o estudiar cada una con más detalle después.Aprendizaje automático1. ¿Qué es el overfitting (sobreajuste)? El sobreajuste en el aprendizaje automático se produce cuando el modelo no está bien generalizado. El modelo se centra demasiado en el conjunto de entrenamiento. Capta muchos detalles o incluso ruido en el conjunto de entrenamiento. Por lo tanto, no logra captar la tendencia general o las relaciones en los datos. Si un modelo es demasiado complejo en comparación con los datos, probablemente estará sobreajustado. Un buen indicador de sobreajuste es la gran diferencia entre la precisión de los conjuntos de entrenamiento y de prueba. Los modelos sobreajustados suelen tener una precisión muy alta en el conjunto de entrenamiento, pero la precisión de la prueba suele ser impredecible y mucho más baja que la de entrenamiento. 2. ¿Cómo se puede reducir el overfitting? Podemos reducir el sobreajuste haciendo que el modelo sea más generalizado, lo que significa que debe centrarse más en la tendencia general que en los detalles específicos. Si es posible, recoger más datos es una forma eficaz de reducir el sobreajuste. Le darás más jugo al modelo para que tenga más material del que aprender. Los datos siempre son valiosos, especialmente para los modelos de aprendizaje automático. Otro método para reducir la sobreadaptación es reducir la complejidad del modelo. Si un modelo es demasiado complejo para una tarea determinada, es probable que se produzca un sobreajuste. En estos casos, debemos buscar modelos más sencillos. 3. ¿Qué es la regularización? Hemos mencionado que la principal razón del sobreajuste es que un modelo sea más complejo de lo necesario. La regularización es un método para reducir la complejidad del modelo. Lo hace penalizando los términos más altos del modelo. Con la adición de un término de regularización, el modelo intenta minimizar tanto la pérdida como la complejidad. Los dos tipos principales de regularización son L1 y L2. La regularización L1 resta una pequeña cantidad de los pesos de las características no informativas en cada iteración. Así, hace que estos pesos se conviertan finalmente en cero. Por otro lado, la regularización L2 elimina un pequeño porcentaje de los pesos en cada iteración. Estos pesos se acercarán a cero, pero nunca llegarán a ser 0.4. ¿Cuál es la diferencia entre clasificación y agrupación? Ambas son tareas de aprendizaje automático. La clasificación es una tarea de aprendizaje supervisado, por lo que tenemos observaciones etiquetadas (es decir, puntos de datos). Entrenamos un modelo con datos etiquetados y esperamos que prediga las etiquetas de los nuevos datos. Por ejemplo, la detección de correos electrónicos no deseados es una tarea de clasificación. Proporcionamos un modelo con varios correos electrónicos marcados como spam o no spam. Una vez entrenado el modelo con esos correos, evaluará los nuevos correos de forma adecuada. La agrupación es una tarea de aprendizaje no supervisada, por lo que las observaciones no tienen etiquetas. Se espera que el modelo evalúe las observaciones y las agrupe en clusters. Las observaciones similares se colocan en el mismo clúster. En el caso óptimo, las observaciones del mismo clúster están lo más cerca posible unas de otras y los diferentes clústeres están lo más separados posible. Un ejemplo de tarea de clustering sería agrupar a los clientes en función de su comportamiento de compra. Python Las estructuras de datos incorporadas son de crucial importancia. Por lo tanto, debes estar familiarizado con lo que son y cómo interactuar con ellas. Lista, diccionario, conjunto y tupla son las 4 principales estructuras de datos incorporadas en Python. 5. ¿Cuál es la diferencia entre listas y tuplas? La principal diferencia entre las listas y las tuplas es la mutabilidad. Las listas son mutables, por lo que podemos manipularlas añadiendo o eliminando elementos.mylist = [1,2,3] mylist.append(4) mylist.remove(1) print(mylist) [2,3,4]En cambio, las tuplas son inmutables. Aunque podemos acceder a cada elemento de una tupla, no podemos modificar su contenido.mytuple = (1,2,3) mytuple.append(4) AttributeError: 'tuple' object has no attribute 'append'Un punto importante a mencionar aquí es que aunque las tuplas son inmutables, pueden contener elementos mutables como listas o conjuntos. mytuple = (1,2,["a","b","c"]) mytuple[2] ['a', 'b', 'c'] mytuple[2][0] = ["A"] print(mytuple) (1, 2, [['A'], 'b', 'c'])6. ¿Cuál es la diferencia entre listas y sets? Hagamos un ejemplo para demostrar la principal diferencia entre listas y conjuntos.text = "Python is awesome!" mylist = list(text) myset = set(text) print(mylist) ['P', 'y', 't', 'h', 'o', 'n', ' ', 'i', 's', ' ', 'a', 'w', 'e', 's', 'o', 'm', 'e', '!'] print(myset) {'t', ' ', 'i', 'e', 'm', 'P', '!', 'y', 'o', 'h', 'n', 'a', 's', 'w'} Como vemos en los objetos resultantes, la lista contiene todos los caracteres de la cadena mientras que el conjunto sólo contiene valores únicos. Otra diferencia es que los caracteres de la lista están ordenados según su ubicación en la cadena. Sin embargo, los caracteres del conjunto no están ordenados. A continuación se muestra una tabla que resume las principales características de las listas, las tuplas y los conjuntos.(image by author)7. ¿Qué es un diccionario y cuáles son las características importantes de los diccionarios? Un diccionario en Python es una colección de pares clave-valor. Es similar a una lista en el sentido de que cada elemento de una lista tiene un índice asociado que empieza por 0.mylist = ["a", "b", "c"] mylist[1] "b"En un diccionario, las claves son el índice. Así, podemos acceder a un valor utilizando su clave.mydict = {"John": 24, "Jane": 26, "Ashley": 22} mydict["Jane"] 26Las claves de un diccionario son únicas, lo que tiene sentido porque actúan como una dirección para los valores. SQL SQL es una habilidad extremadamente importante para los científicos de datos. Hay un gran número de empresas que almacenan sus datos en una base de datos relacional. SQL es lo que se necesita para interactuar con las bases de datos relacionales. Es probable que te hagan una pregunta que implique escribir una consulta para realizar una tarea específica. También es posible que te hagan una pregunta sobre conocimientos generales de bases de datos.8. Ejemplo de Consulta #1 Consider we have a sales table that contains daily sales quantities of products.SELECT TOP 10 * FROM SalesTable(image by author)Encuentre las 5 semanas más importantes en términos de cantidades totales de ventas semanales.SELECT TOP 5 CONCAT(YEAR(SalesDate), DATEPART(WEEK, SalesDate)) AS YearWeek, SUM(SalesQty) AS TotalWeeklySales FROM SalesTable GROUP BY CONCAT(YEAR(SalesDate), DATEPART(WEEK, SalesDate)) ORDER BY TotalWeeklySales DESC (image by author)Primero extraemos la información del año y la semana de la columna de la fecha y luego la utilizamos en la agregación. La función de suma se utiliza para calcular las cantidades totales de ventas. 9. Ejemplo de consulta #2 En la misma tabla de ventas, encuentre el número de artículos únicos que se venden cada mes.SELECT MONTH(SalesDate) AS Month, COUNT(DISTINCT(ItemNumber)) AS ItemCount FROM SalesTable GROUP BY MONTH(SalesDate) Month ItemCount 1 9 1021 2 8 102110. ¿Qué es la normalización y la desnormalización en una base de datos? Estos términos están relacionados con el diseño del esquema de la base de datos. La normalización y la desnormalización tienen como objetivo optimizar diferentes métricas. El objetivo de la normalización es reducir la redundancia e inconsistencia de los datos aumentando el número de tablas. Por otro lado, la desnormalización tiene como objetivo acelerar la ejecución de la consulta. La desnormalización disminuye el número de tablas, pero al mismo tiempo añade cierta redundancia. ConclusiónConvertirse en un científico de datos es una tarea difícil. Requiere tiempo, esfuerzo y dedicación. Sin tener experiencia laboral previa, el proceso se hace más difícil. Las entrevistas son muy importantes para demostrar tus habilidades. En este artículo, hemos cubierto 10 preguntas que es probable que te encuentres en una entrevista de científico de datos. Gracias por leerlo. Por favor, hágame saber si tiene algún comentario.
Apr 06, 2021
El artículo contiene algunos de los conceptos estadísticos avanzados más utilizados junto con su implementación en Python.En mis artículos anteriores Beginners Guide to Statistics in Data Science y The Inferential Statistics Data Scientists Should Know hemos hablado de casi todos los conceptos básicos (descriptivos e inferenciales) de la estadística que se utilizan comúnmente en la comprensión y el trabajo con cualquier estudio de caso de ciencia de datos. En este artículo, vamos a ir un poco más allá y hablar de algunos conceptos avanzados que no son parte del hype/buzz.Puedes leer más artículos de Data Science en español aquí Concepto #1 - Q-Q(quantile-quantile) PlotsAntes de comprender los gráficos QQ, primero hay que entender qué es un cuantil.Un cuantil define una parte concreta de un conjunto de datos, es decir, un cuantil determina cuántos valores de una distribución están por encima o por debajo de un determinado límite. Los cuantiles especiales son el cuartil (cuarto), el quintil (quinto) y los percentiles (centésimo).Un ejemplo:Si dividimos una distribución en cuatro porciones iguales, hablaremos de cuatro cuartiles. El primer cuartil incluye todos los valores que son menores que la cuarta parte de todos los valores. En una representación gráfica, corresponde al 25% del área total de la distribución. Los dos cuartiles inferiores comprenden el 50% de todos los valores de la distribución. El rango intercuartil entre el primer y el tercer cuartil es igual al rango en el que se encuentra el 50% de todos los valores que se distribuyen alrededor de la media. En Estadística, un gráfico Q-Q (cuantil-cuantil) es un gráfico de dispersión creado al trazar dos conjuntos de cuantiles entre sí. Si ambos conjuntos de cuantiles provienen de la misma distribución, deberíamos ver los puntos formando una línea que es aproximadamente recta (y=x).Q-Q plotPor ejemplo, la mediana es un cuantil en el que el 50% de los datos caen por debajo de ese punto y el 50% están por encima. El propósito de los gráficos Q Q es averiguar si dos conjuntos de datos proceden de la misma distribución. En el gráfico Q Q se traza un ángulo de 45 grados; si los dos conjuntos de datos proceden de una distribución común, los puntos caerán sobre esa línea de referencia.Es muy importante saber si la distribución es normal o no para poder aplicar diversas medidas estadísticas a los datos e interpretarlos en una visualización mucho más comprensible para el ser humano, y el gráfico Q-Q entra en escena. La pregunta más fundamental que responde el gráfico Q-Q es si la curva está normalmente distribuida o no.Se distribuye normalmente, pero ¿por qué?Los gráficos Q-Q se utilizan para encontrar el tipo de distribución de una variable aleatoria, ya sea una distribución gaussiana, una distribución uniforme, una distribución exponencial o incluso una distribución de Pareto, etc. Se puede saber el tipo de distribución utilizando la potencia del gráfico Q-Q con sólo mirar el gráfico. En general, hablamos de distribuciones Normales sólo porque tenemos un concepto muy bonito de la regla 68-95-99.7 que se ajusta perfectamente a la distribución normal Así sabemos qué parte de los datos se encuentra en el rango de la primera desviación estándar, la segunda desviación estándar y la tercera desviación estándar de la media. Así que saber si una distribución es Normal nos abre nuevas puertas para experimentar Types of Q-Q plots. Source Skewed Q-Q plotsLos gráficos Q-Q permiten encontrar la asimetría de la distribución. Si el extremo inferior del gráfico Q-Q se desvía de la línea recta, pero el extremo superior no, entonces la distribución es Left skewed(Negatively skewed).Ahora bien, si el extremo superior del gráfico Q-Q se desvía de la línea recta y el inferior no, entonces la distribución es Right skewed(Positively skewed).Tailed Q-Q plotsLos gráficos Q-Q pueden encontrar la curtosis (medida de la cola) de la distribución.La distribución con la cola gorda tendrá ambos extremos de la gráfica Q-Q para desviarse de la línea recta y su centro sigue la línea, donde como una distribución de cola delgada término Q-Q parcela con muy menos o desviación insignificante en los extremos por lo que es un ajuste perfecto para la distribución normal.Q-Q plots en Python(Source)Puedes leer más artículos de Data Science en español aquí Supongamos que tenemos el siguiente conjunto de datos de 100 valores:import numpy as np #create dataset with 100 values that follow a normal distribution np.random.seed(0) data = np.random.normal(0,1, 1000) #view first 10 values data[:10] array([ 1.76405235, 0.40015721, 0.97873798, 2.2408932 , 1.86755799, -0.97727788, 0.95008842, -0.15135721, -0.10321885, 0.4105985 ])Para crear un gráfico Q-Q para este conjunto de datos, podemos utilizar la función qqplot() function de la biblioteca statsmodels:import statsmodels.api as sm import matplotlib.pyplot as plt #create Q-Q plot with 45-degree line added to plot fig = sm.qqplot(data, line='45') plt.show()En un gráfico Q-Q, el eje x muestra los cuantiles teóricos. Esto significa que no muestra los datos reales, sino que representa dónde estarían los datos si se distribuyeran normalmente.El eje Y muestra los datos reales. Esto significa que si los valores de los datos caen a lo largo de una línea aproximadamente recta en un ángulo de 45 grados, entonces los datos están distribuidos normalmente.Podemos ver en nuestro gráfico Q-Q de arriba que los valores de los datos tienden a seguir de cerca el ángulo de 45 grados, lo que significa que los datos están probablemente distribuidos normalmente. Esto no debería ser sorprendente, ya que generamos los 100 valores de datos utilizando el numpy.random.normal() function.Considere en cambio si generamos un conjunto de datos de 100 valores distribuidos uniformemente y creamos un gráfico Q-Q para ese conjunto de datos:#create dataset of 100 uniformally distributed values data = np.random.uniform(0,1, 1000) #generate Q-Q plot for the dataset fig = sm.qqplot(data, line='45') plt.show()Los valores de los datos no siguen claramente la línea roja de 45 grados, lo que indica que no siguen una distribución normal.Concepto #2- Chebyshev's InequalityEn probabilidad, la desigualdad de Chebyshev, también conocida como desigualdad "Bienayme-Chebyshev", garantiza que, para una amplia clase de distribuciones de probabilidad, sólo una fracción definida de valores se encontrará dentro de una distancia específica de la media de una distribución.Source: https://www.thoughtco.com/chebyshevs-inequality-3126547 La desigualdad de Chebyshev es similar a la regla empírica (68-95-99,7); sin embargo, esta última regla sólo se aplica a las distribuciones normales. La desigualdad de Chebyshev es más amplia; puede aplicarse a cualquier distribución siempre que ésta incluya una varianza y una media definidas.Así, la desigualdad de Chebyshev dice que al menos (1-1/k^2) de los datos de una muestra deben caer dentro de K desviaciones estándar de la media (o, de forma equivalente, no más de 1/k^2 de los valores de la distribución pueden estar a más de k desviaciones estándar de la media).Donde K --> número real positivoSi los datos no se distribuyen normalmente, entonces diferentes cantidades de datos podrían estar en una desviación estándar. La desigualdad de Chebyshev proporciona una manera de saber qué fracción de datos cae dentro de K desviaciones estándar de la media para cualquier distribución de datos.Lea También: 22 Preguntas Sobre Estadística Para Preparar En Una Entrevista De TrabajoCredits: https://calcworkshop.com/joint-probability-distribution/chebyshev-inequality/ La desigualdad de Chebyshev es de gran valor porque puede aplicarse a cualquier distribución de probabilidad en la que se proporcionen la media y la varianza.Consideremos un ejemplo: supongamos que se presentan 1.000 concursantes a una entrevista de trabajo, pero sólo hay 70 puestos disponibles. Para seleccionar a los 70 mejores concursantes del total, el propietario realiza unas pruebas para juzgar su potencial. La puntuación media de la prueba es de 60, con una desviación estándar de 6. Si un aspirante obtiene una puntuación de 84, ¿puede presumir que va a conseguir el puesto?Los resultados muestran que unas 63 personas obtuvieron una puntuación superior a 60, por lo que, con 70 puestos disponibles, un concursante que obtenga una puntuación de 84 puede estar seguro de haber conseguido el puesto.Chebyshev's Inequality en Python(Source) Crear una población de 1.000.000 de valores, utilizo una distribución gamma (también funciona con otras distribuciones) con forma = 2 y escala = 2.import numpy as np import random import matplotlib.pyplot as plt #create a population with a gamma distribution shape, scale = 2., 2. #mean=4, std=2*sqrt(2) mu = shape*scale #mean and standard deviation sigma = scale*np.sqrt(shape) s = np.random.gamma(shape, scale, 1000000)Ahora muestree 10.000 valores de la población.#sample 10000 values rs = random.choices(s, k=10000)Cuente la muestra que tiene una distancia del valor esperado mayor que la desviación estándar k y utilice el recuento para calcular las probabilidades. Quiero representar una tendencia de las probabilidades cuando k aumenta, así que utilizo un rango de k de 0,1 a 3.#set k ks = [0.1,0.5,1.0,1.5,2.0,2.5,3.0] #probability list probs = [] #for each k for k in ks: #start count c = 0 for i in rs: # count if far from mean in k standard deviation if abs(i - mu) > k * sigma : c += 1 probs.append(c/10000)Traza los resultados:plot = plt.figure(figsize=(20,10)) #plot each probability plt.xlabel('K') plt.ylabel('probability') plt.plot(ks,probs, marker='o') plot.show() #print each probability print("Probability of a sample far from mean more than k standard deviation:") for i, prob in enumerate(probs): print("k:" + str(ks[i]) + ", probability: " \ + str(prob)[0:5] + \ " | in theory, probability should less than: " \ + str(1/ks[i]**2)[0:5])A partir del gráfico y el resultado anteriores, podemos ver que a medida que aumenta k, la probabilidad es decreciente, y la probabilidad de cada k sigue la desigualdad. Además, sólo el caso de que k sea mayor que 1 es útil. Si k es menor que 1, el lado derecho de la desigualdad es mayor que 1, lo que no es útil porque la probabilidad no puede ser mayor que 1.Concepto #3- Log-Normal DistributionEn teoría de la probabilidad, una distribución logarítmica normal, también conocida como distribución de Galton, es una distribución de probabilidad continua de una variable aleatoria cuyo logaritmo se distribuye normalmente.Así, si la variable aleatoria X se distribuye de forma log-normal, entonces Y = ln(X) tiene una distribución normal. De forma equivalente, si Y tiene una distribución normal, entonces la función exponencial de Y, es decir, X = exp(Y), tiene una distribución log-normal. Puedes leer más artículos de Data Science en español aquí Las distribuciones sesgadas con baja media y alta varianza y todos los valores positivos encajan en este tipo de distribución. Una variable aleatoria con distribución log-normal sólo toma valores reales positivos. La fórmula general de la función de densidad de probabilidad de la distribución lognormal esLos parámetros de localización y escala equivalen a la media y la desviación estándar del logaritmo de la variable aleatoria.La forma de la distribución Lognormal está definida por 3 parámetros:σ es el parámetro de forma, (y es la desviación estándar del logaritmo de la distribución)θ o μ es el parámetro de localización (y es la media de la distribución)m es el parámetro de escala (y es también la mediana de la distribución)Los parámetros de localización y escala son equivalentes a la media y la desviación estándar del logaritmo de la variable aleatoria, como se ha explicado anteriormente.Si x = θ, entonces f(x) = 0. El caso en el que θ = 0 y m = 1 se denomina distribución lognormal estándar. El caso en el que θ es igual a cero se denomina distribución lognormal de 2 parámetros.El siguiente gráfico ilustra el efecto del parámetro de localización(μ) y escala(σ) en la función de densidad de probabilidad de la distribución lognormal: Source: https://www.sciencedirect.com/topics/mathematics/lognormal-distribution Log-Normal Distribution en Python(Source)Consideremos un ejemplo para generar números aleatorios a partir de una distribución log-normal con μ=1 y σ=0,5 utilizando la función scipy.stats.lognorm.import numpy as np import matplotlib.pyplot as plt from scipy.stats import lognorm np.random.seed(42) data = lognorm.rvs(s=0.5, loc=1, scale=1000, size=1000) plt.figure(figsize=(10,6)) ax = plt.subplot(111) plt.title('Generate wrandom numbers from a Log-normal distribution') ax.hist(data, bins=np.logspace(0,5,200), density=True) ax.set_xscale("log") shape,loc,scale = lognorm.fit(data) x = np.logspace(0, 5, 200) pdf = lognorm.pdf(x, shape, loc, scale) ax.plot(x, pdf, 'y') plt.show()Concepto #4- Power Law distributionEn estadística, una ley de potencia es una relación funcional entre dos cantidades, en la que un cambio relativo en una cantidad da lugar a un cambio relativo proporcional en la otra cantidad, independientemente del tamaño inicial de esas cantidades: una cantidad varía como una potencia de otra.Por ejemplo, considerando el área de un cuadrado en función de la longitud de su lado, si se duplica la longitud, el área se multiplica por un factor de cuatro.Una distribución de ley de potencia tiene la forma Y = k Xα, donde:X e Y son variables de interés,α es el exponente de la ley,k es una constante.Source: https://en.wikipedia.org/wiki/Power_law La distribución de la ley de potencia es sólo una de las muchas distribuciones de probabilidad, pero se considera una herramienta valiosa para evaluar los problemas de incertidumbre que la distribución normal no puede manejar cuando se producen con cierta probabilidad.Se ha comprobado que muchos procesos siguen leyes de potencia en rangos de valores considerables. Desde la distribución en los ingresos, el tamaño de los meteoroides, las magnitudes de los terremotos, la densidad espectral de las matrices de pesos en las redes neuronales profundas, el uso de las palabras, el número de vecinos en varias redes, etc. (Nota: La ley de potencia aquí es una distribución continua. Los dos últimos ejemplos son discretos, pero a gran escala pueden modelarse como si fueran continuos).Puedes leer más artículos de Data Science en español aquí Lea también: Medidas Estadísticas De Tendencia CentralPower-law distribution en Python(Source) Trazamos el Pareto distribution que es una forma de distribución de probabilidad de ley de potencia. La distribución de Pareto se conoce a veces como Principio de Pareto o regla "80-20", ya que la regla establece que el 80% de la riqueza de la sociedad está en manos del 20% de su población. La distribución de Pareto no es una ley de la naturaleza, sino una observación. Es útil en muchos problemas del mundo real. Se trata de una distribución sesgada de cola pesada.import numpy as np import matplotlib.pyplot as plt from scipy.stats import pareto x_m = 1 #scale alpha = [1, 2, 3] #list of values of shape parameters plt.figure(figsize=(10,6)) samples = np.linspace(start=0, stop=5, num=1000) for a in alpha: output = np.array([pareto.pdf(x=samples, b=a, loc=0, scale=x_m)]) plt.plot(samples, output.T, label='alpha {0}' .format(a)) plt.xlabel('samples', fontsize=15) plt.ylabel('PDF', fontsize=15) plt.title('Probability Density function', fontsize=15) plt.legend(loc='best') plt.show()Concepto #5- Box cox transformationLa transformación de Box-Cox transforma nuestros datos para que se parezcan a una distribución normal.Las transformaciones de Box-Cox de un parámetro se definen como En muchas técnicas estadísticas, suponemos que los errores se distribuyen normalmente. Esta suposición nos permite construir intervalos de confianza y realizar pruebas de hipótesis. Al transformar la variable objetivo, podemos (con suerte) normalizar nuestros errores (si no son ya normales).Además, la transformación de nuestras variables puede mejorar el poder predictivo de nuestros modelos porque las transformaciones pueden eliminar el ruido blanco.Distribución original (izquierda) y distribución casi normal después de aplicar la transformación Box cox. Source En el núcleo de la transformación Box-Cox hay un exponente, lambda (λ), que varía de -5 a 5. Se consideran todos los valores de λ y se selecciona el valor óptimo para sus datos; el "valor óptimo" es el que da como resultado la mejor aproximación a una curva de distribución normal.Las transformaciones Box-Cox de un parámetro se definen como:y las transformaciones Box-Cox de dos parámetros como:Además, la transformación de Box-Cox de un parámetro es válida para y > 0, es decir, sólo para valores positivos, y la transformación de Box-Cox de dos parámetros para y > -λ, es decir, para valores negativos. El parámetro λ se estima mediante el profile likelihood function y utilizando pruebas de bondad de ajuste.Si hablamos de algunos inconvenientes de la transformación Box-cox, entonces si lo que se quiere es la interpretación, entonces no se recomienda Box-cox. Porque si λ es algún número distinto de cero, entonces la variable objetivo transformada puede ser más difícil de interpretar que si simplemente aplicamos una transformación logarítmica.Puedes leer más artículos de Data Science en español aquí Un segundo escollo es que la transformación Box-Cox suele dar la mediana de la distribución de la previsión cuando revertimos los datos transformados a su escala original. En ocasiones, queremos la media y no la mediana.Box-Cox transformation en Python (Source)El paquete stats de SciPy proporciona una función llamada boxcox para realizar la transformación de potencia box-cox que toma los datos originales no normales como entrada y devuelve los datos ajustados junto con el valor lambda que se utilizó para ajustar la distribución no normal a la distribución normal.#load necessary packages import numpy as np from scipy.stats import boxcox import seaborn as sns #make this example reproducible np.random.seed(0) #generate dataset data = np.random.exponential(size=1000) fig, ax = plt.subplots(1, 2) #plot the distribution of data values sns.distplot(data, hist=False, kde=True, kde_kws = {'shade': True, 'linewidth': 2}, label = "Non-Normal", color ="red", ax = ax[0]) #perform Box-Cox transformation on original data transformed_data, best_lambda = boxcox(data) sns.distplot(transformed_data, hist = False, kde = True, kde_kws = {'shade': True, 'linewidth': 2}, label = "Normal", color ="red", ax = ax[1]) #adding legends to the subplots plt.legend(loc = "upper right") #rescaling the subplots fig.set_figheight(5) fig.set_figwidth(10) #display optimal lambda value print(f"Lambda value used for Transformation: {best_lambda}") Concepto #6- Poisson distributionEn la teoría de la probabilidad y la estadística, la distribución de Poisson es una distribución de probabilidad discreta que expresa la probabilidad de que se produzca un número determinado de sucesos en un intervalo fijo de tiempo o espacio si estos sucesos se producen con una tasa media constante conocida y con independencia del tiempo transcurrido desde el último suceso.En términos muy sencillos, una distribución de Poisson puede utilizarse para estimar la probabilidad de que algo ocurra "X" número de veces. Algunos ejemplos de procesos de Poisson son los clientes que llaman a un centro de ayuda, la desintegración radiactiva de los átomos, los visitantes de una página web, los fotones que llegan a un telescopio espacial y los movimientos en el precio de las acciones. Los procesos de Poisson suelen estar asociados al tiempo, pero no tienen por qué estarlo. La fórmula de la distribución de Poisson es:Donde:e es el numero de Euler (e = 2.71828...)k es el numero de ocurrenciask! es el factorial de k kλ es igual al valor esperado de kcuando éste es también igual a su varianzaLambda(λ) puede considerarse como el número esperado de eventos en el intervalo. A medida que cambiamos el parámetro de la tasa, λ, cambiamos la probabilidad de ver diferentes números de eventos en un intervalo. El siguiente gráfico es la función de masa de probabilidad de la distribución de Poisson que muestra la probabilidad de que se produzca un número de sucesos en un intervalo con diferentes parámetros de tasa. Función de masa de probabilidad para la distribución de Poisson con parámetros de tasa variables. Source La distribución de Poisson también se utiliza habitualmente para modelar datos de recuento financiero en los que el recuento es pequeño y a menudo es cero. Por ejemplo, en finanzas, puede utilizarse para modelar el número de operaciones que un inversor típico realizará en un día determinado, que puede ser 0 (a menudo), o 1, o 2, etc.Otro ejemplo: este modelo puede utilizarse para predecir el número de "shocks" del mercado que se producirán en un periodo de tiempo determinado, por ejemplo, durante una década.Poisson distribution en Pythonfrom numpy import random import matplotlib.pyplot as plt import seaborn as sns lam_list = [1, 4, 9] #list of Lambda values plt.figure(figsize=(10,6)) samples = np.linspace(start=0, stop=5, num=1000) for lam in lam_list: sns.distplot(random.poisson(lam=lam, size=10), hist=False, label='lambda {0}'.format(lam)) plt.xlabel('Poisson Distribution', fontsize=15) plt.ylabel('Frequency', fontsize=15) plt.legend(loc='best') plt.show()A medida que λ se hace más grande, el gráfico se parece más a una distribución normal.Espero que hayas disfrutado de la lectura de este artículo, Si tienes alguna pregunta o sugerencia, por favor deja un comentario.Lea también: Falsos Positivos Vs. Falsos Negativos Siéntase libre de conectarse conmigo en LinkedIn para cualquier consulta.¡¡¡Gracias por leer!!!Puedes leer más artículos de Data Science en español aquí Referenciashttps://calcworkshop.com/joint-probability-distribution/chebyshev-inequality/ https://corporatefinanceinstitute.com/resources/knowledge/data-analysis/chebyshevs-inequality/ https://www.itl.nist.gov/div898/handbook/eda/section3/eda3669.htm https://www.statology.org/q-q-plot-python/ https://gist.github.com/chaipi-chaya/9eb72978dbbfd7fa4057b493cf6a32e7 https://stackoverflow.com/a/41968334/7175247
Apr 06, 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!!!
Apr 06, 2021
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!