---
# System prepended metadata

title: Tarea 3 - Inteligencia de Negocios y Mineria de Datos

---

---
title: "Tarea 3 - Inteligencia de Negocios y Mineria de Datos"
author: "Rolando Esquivel, Alejandro Masis y Jorge Rodriguez"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)

# carga de paquetes necesarios
library(plyr)
library(arules)
library(arulesViz)
library(tidyverse)
library(ggplot2)
library(knitr)
library(lubridate)
```
# Entendimiento del negocio

## Objetivos de la minería de datos

* Test 1

## Criterio de éxito


# Entendimiento de los datos

## Exploración de los datos

## Verificación de la calidad de datos

Test 2

### Lectura de datos

```{r}
# lectura de los datos

datos<- read.csv('Encuesta.csv',sep=',',dec='.',stringsAsFactors = FALSE)

 
```

# Preparación de los datos

## Selección de los datos

## Limpieza de los datos

## Construcción de nuevos datos (atributos)

## Transformaciones aplicadas a los datos

### Transformación inicial de los datos
```{r}
 # se convierten a factor las variables no numéricas
 datosCompletos<- datos %>% mutate(Tiempo_comunidad=as.factor(Tiempo_comunidad))
 datosCompletos<- datosCompletos %>% mutate(Sexo=as.factor(Sexo))
 datosCompletos<- datosCompletos %>% mutate(Trabaja=as.factor(Trabaja))
 datosCompletos<- datosCompletos %>% mutate(Familia=as.factor(Familia))
 datosCompletos<- datosCompletos %>% mutate(Hobbies=as.factor(Hobbies))
 datosCompletos<- datosCompletos %>% mutate(Club_Social=as.factor(Club_Social))
 datosCompletos<- datosCompletos %>% mutate(Politica=as.factor(Politica))
 datosCompletos<- datosCompletos %>% mutate(Profesional=as.factor(Profesional))
 datosCompletos<- datosCompletos %>% mutate(Medioambiente=as.factor(Medioambiente))
 datosCompletos<- datosCompletos %>% mutate(Grupo_Apoyo=as.factor(Grupo_Apoyo))
```
### Transformar a formato transacción

```{r echo=FALSE}
# luego se concatena con una coma
transacciones <- as(datosCompletos,"transactions")
```

# Fase de modelado

## Selección de técnicas

## Construcción del modelo

* Selección de los parámetros
* Ejecución (generación de reglas, eliminación de subconjuntos,etc)
* Descripción general de las reglas obtenidas (incluya al menos un gráfico)

### Generación de las reglas usando A priori con Confianza como Criterio de filtrado

```{r}
 # se generan las reglas usando el algoritmo a priori, con un soporte del 1% y una confianza de 0.8

  reglas_alta_conf<- apriori(transacciones,parameter = list(supp=0.1,conf=0.9,maxlen=4,minlen=2))
   
  # se ordena por confianza y se observan las primeras 10 reglas
  inspect(sort(reglas_alta_conf,by='confidence',decreasing = TRUE)[1:10])
  
  
  # eliminar reglas que son subconjuntos de otras 
  subconjuntos_ac<- which(colSums(is.subset(reglas_alta_conf,reglas_alta_conf))>1)
  
  reglasFinal_ac<- reglas_alta_conf[-subconjuntos_ac]
  
  # se ordena por soporte y se observan las primeras 10 reglas
  inspect(sort(reglasFinal_ac,by='confidence',decreasing = TRUE)[1:5])
  # se filtran las reglas con confianza superior a 0.25
  
  mejoresReglas_ac<- reglasFinal_ac[quality(reglasFinal_ac)$confidence>0.9]
  
```

### Generación de las reglas usando A priori con Soporte como Criterio de filtrado
```{r}
 # se generarn las reglas usando el algoritmo a priori, con un soporte del 1% y una confianza de 0.8

  reglas_alto_supp<- apriori(transacciones,parameter = list(supp=0.4,conf=0.8,maxlen=4,minlen=2))
  
  # se ordena por soporte y se observan las primeras 10 reglas
  inspect(sort(reglas_alto_supp,by='support',decreasing = TRUE)[1:10])
  
  # eliminar reglas que son subconjuntos de otras 
  subconjuntos_as<- which(colSums(is.subset(reglas_alto_supp,reglas_alto_supp))>1)
  
  reglasFinal_as<- reglas_alto_supp[-subconjuntos_as]
  
  # se ordena por soporte y se observan las primeras 10 reglas
  inspect(sort(reglasFinal_as,by='support',decreasing = TRUE)[1:5])
  
  # se filtran las reglas con confianza superior a 0.25
  mejoresReglas_as<- reglasFinal_as[quality(reglasFinal_as)$support>0.5]
  
```

## Descripción de las reglas obtenidas

### Visualización de las 5 mejores reglas (según confianza) - grafo
```{r fig.align='center'}
   cincoMejoresReglas_ac<- head(mejoresReglas_ac,n=5,by='confidence')
  
   plot(cincoMejoresReglas_ac,method = 'graph',engine = 'htmlwidget')

```

### Visualización de las 5 mejores reglas (según soporte) - grafo
```{r fig.align='center'}
   cincoMejoresReglas_as<- head(mejoresReglas_as,n=5,by='support')
  
   plot(cincoMejoresReglas_as,method = 'graph',engine = 'htmlwidget')

```

# Evaluación de los modelos
Muestre e interprete las mejores 3 reglas de cada conjunto generado

### Exportar las reglas
```{r}
write(mejoresReglas_ac,file='mejoresReglasPorConfianza.csv',sep=',',quote=F,row.names=F)
write(mejoresReglas_as,file='mejoresReglasPorSoporte.csv',sep=',',quote=F,row.names=F)


```