Simular un modelo de clasificación para predecir si un apersona es FELIZ O NO FELIZ.
Cargar un conjunto de datos en donde que permitirá simular un modelo de clasificación que etiquete a una persona si es FELIZ O NO FELIZ.
El conjunto de datos tiene dos variables, una variable independiente llamada dinero y la variable dependiente o de etiqueta que se llama estado que contiene un valor binario: FELIZ y NO FELIZ.
La predicción de la clasificación será aleatoria.
Cargar librerías
library(readr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(caret) # Para matriz de confusion
## Loading required package: lattice
## Loading required package: ggplot2
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/Industrias-4.0/main/datos/dinero%20feliz%20no%20feliz.csv")
datos
## dinero estado
## 1 90.0 FELIZ
## 2 30.0 NO FELIZ
## 3 70.0 FELIZ
## 4 20.0 NO FELIZ
## 5 60.0 NO FELIZ
## 6 50.0 NO FELIZ
## 7 70.0 FELIZ
## 8 20.0 NO FELIZ
## 9 70.0 FELIZ
## 10 80.0 FELIZ
## 11 90.0 FELIZ
## 12 70.0 NO FELIZ
## 13 20.0 NO FELIZ
## 14 65.9 FELIZ
## 15 33.5 NO FELIZ
## 16 20.5 NO FELIZ
## 17 49.5 FELIZ
## 18 55.0 FELIZ
## 19 100.0 FELIZ
## 20 95.0 FELIZ
## 21 70.0 FELIZ
## 22 60.0 FELIZ
## 23 50.0 FELIZ
## 24 35.0 NO FELIZ
## 25 30.0 NO FELIZ
## 26 40.0 NO FELIZ
## 27 56.5 FELIZ
## 28 60.0 NO FELIZ
## 29 49.0 FELIZ
## 30 45.0 NO FELIZ
Simular un modelo de clasificación
Se simula un modelo de clasificación “Sin nombre” de manera eleatoria para clasificar a una persona como FELIZ o NO FELIZ.
Sembrar una semilla significa que se repiten los mismos los valores en funciones aleatorias cuando se vuelve a ejecutar el código o reconstruir el documento markdown.
n <- nrow(datos) # Debe ser 30 rgistros
set.seed(2021)
estados <- c('FELIZ', 'NO FELIZ')
predicciones <- sample(x = estados, size = n, replace = TRUE, prob = c(0.80, 0.20))
predicciones
## [1] "FELIZ" "FELIZ" "FELIZ" "FELIZ" "FELIZ" "FELIZ"
## [7] "FELIZ" "FELIZ" "NO FELIZ" "NO FELIZ" "FELIZ" "NO FELIZ"
## [13] "FELIZ" "FELIZ" "NO FELIZ" "FELIZ" "FELIZ" "NO FELIZ"
## [19] "NO FELIZ" "FELIZ" "FELIZ" "NO FELIZ" "FELIZ" "FELIZ"
## [25] "FELIZ" "NO FELIZ" "NO FELIZ" "NO FELIZ" "NO FELIZ" "NO FELIZ"
datos <- mutate(datos, predicciones = predicciones)
datos
## dinero estado predicciones
## 1 90.0 FELIZ FELIZ
## 2 30.0 NO FELIZ FELIZ
## 3 70.0 FELIZ FELIZ
## 4 20.0 NO FELIZ FELIZ
## 5 60.0 NO FELIZ FELIZ
## 6 50.0 NO FELIZ FELIZ
## 7 70.0 FELIZ FELIZ
## 8 20.0 NO FELIZ FELIZ
## 9 70.0 FELIZ NO FELIZ
## 10 80.0 FELIZ NO FELIZ
## 11 90.0 FELIZ FELIZ
## 12 70.0 NO FELIZ NO FELIZ
## 13 20.0 NO FELIZ FELIZ
## 14 65.9 FELIZ FELIZ
## 15 33.5 NO FELIZ NO FELIZ
## 16 20.5 NO FELIZ FELIZ
## 17 49.5 FELIZ FELIZ
## 18 55.0 FELIZ NO FELIZ
## 19 100.0 FELIZ NO FELIZ
## 20 95.0 FELIZ FELIZ
## 21 70.0 FELIZ FELIZ
## 22 60.0 FELIZ NO FELIZ
## 23 50.0 FELIZ FELIZ
## 24 35.0 NO FELIZ FELIZ
## 25 30.0 NO FELIZ FELIZ
## 26 40.0 NO FELIZ NO FELIZ
## 27 56.5 FELIZ NO FELIZ
## 28 60.0 NO FELIZ NO FELIZ
## 29 49.0 FELIZ NO FELIZ
## 30 45.0 NO FELIZ NO FELIZ
matriz <- table(datos$estado, datos$predicciones)
matriz
##
## FELIZ NO FELIZ
## FELIZ 9 7
## NO FELIZ 9 5
Renglones son la realidad:
¿Cuántas personas son felices?: 10
¿Cuántas persona son NO FELICES?: 9
Las columnas son las predicciones:
¿A cuántos FELIZ le atinó el modelo simulado?. a 5
¿A cuántos NO FELIZ le atinó el modelo simulado? a 6
¿A cuántos le atinó en total ? a11. Exactitud
Positivo Negativo:
Positivo = FELIZ … Otros Ejemplos COVID, APROBASTE, VIVO
Negativo = NO FELIZ… Otros Ejemplos NO COVID, NO APROBASTE, NO VIVO
| Predicción FELIZ | Predicción NO FELIZ | |
|---|---|---|
| Realidad Feliz | TP = 5 | FN = 5 |
| Realidad NO FELIZ | FP = 3 | TN = 6 |
VERDADEROS POSITIVOS. VP o TRUE TP igual a los casos que la realidad es positivo y el modelo acierta en positivo. TP=5
FALSOS POSITIVOS. FP Igual a que la realidad dice que es negativo y el modelo dice que es positivo.
FALSO NEGATIVO FN O FN igual a que la realidad dice que es positivo y el modelo dice que es negativo
VERDADEROS NEGATIVOS VN o TRUE TN igual a los casos que la realidad es negativo y el modelo acierta en negativo TN = 6.
Los valores de la matriz se acceden por renglón columna [renglón, columna]
Verdaderos:
TP <- matriz[1,1]
paste("TP", TP)
## [1] "TP 9"
TN <- matriz[2,2]
paste("TN", TN)
## [1] "TN 5"
Falsos:
FP <- matriz[2,1]
FP
## [1] 9
FN <- matriz[1,2]
FN
## [1] 7
Exactitud
exactitud <- (TP + TN) / (TP + FP + FN + TN)
exactitud <- exactitud * 100
paste("Exactitud es de: ", round(exactitud,2), "%")
## [1] "Exactitud es de: 46.67 %"
Otra manera usando la función diag() y sum(matriz)
accuracy <- sum(diag(matriz)) / sum(matriz)
accuracy <- accuracy * 100
paste("Exactitud es de: ", round(accuracy,2), "%")
## [1] "Exactitud es de: 46.67 %"
precision = TP / (TP + FP)
paste("Precision es de: ", round(precision,2), "%")
## [1] "Precision es de: 0.5 %"
sensibilidad <- TP / (TP + FN)
paste("Sensibilidad es de: ", round(sensibilidad,2), "%")
## [1] "Sensibilidad es de: 0.56 %"
Matriz de confusión usando la librería caret con la función confusionMatrix().
Antes de usar la función categorizar las variables es decir hacerlos factor.
datos$estado <- as.factor(datos$estado)
datos$predicciones <- as.factor(datos$predicciones)
matriz.2 <- confusionMatrix(datos$estado,datos$predicciones)
matriz.2
## Confusion Matrix and Statistics
##
## Reference
## Prediction FELIZ NO FELIZ
## FELIZ 9 7
## NO FELIZ 9 5
##
## Accuracy : 0.4667
## 95% CI : (0.2834, 0.6567)
## No Information Rate : 0.6
## P-Value [Acc > NIR] : 0.9519
##
## Kappa : -0.0811
##
## Mcnemar's Test P-Value : 0.8026
##
## Sensitivity : 0.5000
## Specificity : 0.4167
## Pos Pred Value : 0.5625
## Neg Pred Value : 0.3571
## Prevalence : 0.6000
## Detection Rate : 0.3000
## Detection Prevalence : 0.5333
## Balanced Accuracy : 0.4583
##
## 'Positive' Class : FELIZ
##