1.1. Determinar el objetivo del negocio.
El objetivo de la minería de datos que se aplica para este proyecto es el clasificar si los pacientes cuentan con un cáncer benigno o maligno del, con el fin de poder predecir evaluando esta diagnosis general. Basándose en mediciones ya adquiridas en el conjunto de los datos.
1.2. Evaluar la situación actual.
Se consiguió el conjunto de datos de kaggle, en el cual fue descargado y publicado en github, para mayor facilidad de acceso, para poder evaluar lo que se necesita. Por lo que a priori se puede afirmar que se dispone de una cantidad de datos más que suficiente para poder resolver el problema. Esta información incluye: mediciones generales del cáncer, que vendrían a ser los tumores generados, el radio, el área, etc, las cuales serán útiles a la hora de aplicar la minería de datos.
1.3. Determinar el objetivo de la minería de datos.
Los objetivos en términos de minería de datos son:
Hacer uso de las herramientas de clasificación que binda la minería de datos.
Predecir a partir de un diagnostico general si un paciente cuenta con un cáncer benigno o maligno.
Comprobar con técnicas de predicción operaciones relacionadas con los pacientes del hospital.
1.4. Realizar un plan de proyecto.
El proyecto estará dividido mediante las siguientes etapas, con la finalidad de facilitar la organización de este mismo:
Etapa 1: Análisis de la estructura de los datos y la información de la base de datos.
Etapa 2: Ejecución de consultas para tener muestras representativas de los datos.
Etapa 3: Preparación de los datos (selección, limpieza, conversión y formateo, si fuera necesario).
Etapa 4: Elección de las técnicas de modelado y ejecución de las mismas sobre los datos.
Etapa 5: Análisis de los resultados obtenidos en la etapa anterior, si fuera necesario repetir la etapa 4.
Etapa 6: Producción de informes con los resultados obtenidos en función de los objetivos de negocio y los criterios de éxito establecidos.
Etapa 7: Presentación de los resultados finales.
2.1. Información inicial de la data
data <- read.csv("https://raw.githubusercontent.com/cnahuina/data-mineria/master/dataCancerFinal2.csv")
data <- data[,2:8]
De acuerdo a ello se visualiza lo siguiente:
str(data)
## 'data.frame': 569 obs. of 7 variables:
## $ PC1 : num -9.29 -2.84 -6.79 -5.49 -4.93 ...
## $ PC2 : num -1.97 4.31 1.3 -7.33 2.08 ...
## $ PC3 : num 1.355 0.628 0.266 1.655 -1.465 ...
## $ PC4 : num -3.546 -1.179 -1.153 0.371 -3.635 ...
## $ PC5 : num -1.5285 0.0643 -0.6834 0.1112 0.1196 ...
## $ PC6 : num -1.5151 0.0216 -0.6836 -1.2302 1.563 ...
## $ Diagnosis: chr "M" "M" "M" "M" ...
data$Diagnosis <- as.factor(data$Diagnosis)
2.2. Información inicial de la data
Variables:
Variables | Descripción de variables |
---|---|
Id | Identificador del paciente |
diagnosis | El diagnóstico de los pacientes “B” [Benigno] y “M” [Maligno] |
PC1 | Componente 1 |
PC2 | Componente 2 |
PC3 | Componente 3 |
PC4 | Componente 4 |
PC5 | Componente 5 |
PC6 | Componente 6 |
Este análisis tiene como objetivo observar qué características son más útiles para predecir el cáncer maligno o benigno y ver las tendencias generales que pueden ayudarnos en la selección del modelo y la selección de hiperparámetros en el análisis futuro.
3.3. Construir data
# install.packages("caret")
library(caret)
# install.packages("rpart")
library(rpart)
# install.packages("partykit")
library(partykit)
# install.packages("ROCR")
library(ROCR)
set.seed(2018)
training.ids <- createDataPartition(data$Diagnosis, p = 0.7, list = F)
test <- data[-training.ids,]
dim(test)
## [1] 170 7
mod <- rpart(Diagnosis ~ . ,
data = data[training.ids,],
method = "class",
control = rpart.control(minsplit = 20, cp = 0.01))
mod
## n= 399
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 399 149 B (0.62656642 0.37343358)
## 2) PC1>=-0.8810513 264 22 B (0.91666667 0.08333333)
## 4) PC1>=0.9136768 210 4 B (0.98095238 0.01904762) *
## 5) PC1< 0.9136768 54 18 B (0.66666667 0.33333333)
## 10) PC2< 1.201075 39 7 B (0.82051282 0.17948718) *
## 11) PC2>=1.201075 15 4 M (0.26666667 0.73333333) *
## 3) PC1< -0.8810513 135 8 M (0.05925926 0.94074074) *
plot(as.party(mod))
mod.pred <- predict(mod, test, type="class")
mod.pred.ba <- predict(mod, test, type="prob")
table <- table(test$Diagnosis,mod.pred, dnn = c("Actual", "Predicho"))
table
## Predicho
## Actual B M
## B 99 8
## M 4 59
Para el diagrama ROC del modelo básico
Curva ROC <- proporciona la fiabilidad en la clasificación dada.
1ro objeto pred, se tiene la funcion prediction, de la segunda columna en la cual visualizamos los éxitos. En referencia al código anterior.
2do evaluamos la performance para evaluar la eficiencia.
pred1 <- prediction(mod.pred.ba[,2], data[-training.ids, "Diagnosis"])
perf1 <- performance(pred1, "tpr", "fpr")
plot(perf1, main="Curva ROC del modelo Rpart-árbol")
lines(par()$usr[1:2],par()$usr[3:4])
medida <- confusionMatrix(mod.pred, test$Diagnosis)
medida
## Confusion Matrix and Statistics
##
## Reference
## Prediction B M
## B 99 4
## M 8 59
##
## Accuracy : 0.9294
## 95% CI : (0.8799, 0.963)
## No Information Rate : 0.6294
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8506
##
## Mcnemar's Test P-Value : 0.3865
##
## Sensitivity : 0.9252
## Specificity : 0.9365
## Pos Pred Value : 0.9612
## Neg Pred Value : 0.8806
## Prevalence : 0.6294
## Detection Rate : 0.5824
## Detection Prevalence : 0.6059
## Balanced Accuracy : 0.9309
##
## 'Positive' Class : B
##
acc <- (99+59)/170
acc
## [1] 0.9294118
error_rate <- 1 - acc
error_rate
## [1] 0.07058824