En el presente informe, se realiza un análisis exhaustivo de los datos relacionados con las pólizas emitidas por una compañía de seguros, con el fin de evaluar la calidad de los datos, identificar valores atípicos, realizar un análisis exploratorio de la prima emitida por sucursal y ramo comercial, analizar la evolución de la prima total y por ramo a lo largo del tiempo, y llevar a cabo una segmentación de clientes por tipo de póliza y monto asegurado.
El análisis está estructurado en cuatro secciones, cada una dirigida a un aspecto clave del estudio de datos.
En esta primera sección, se evalúa la calidad de los datos para detectar posibles problemas de inconsistencias o valores faltantes. La estructura de los datos fue inspeccionada mediante funciones de resumen estadístico, y se revisó la presencia de valores nulos en las principales variables de interés, como la fecha de constitución de la póliza, la prima anual, y la suma asegurada.
La base está conformada por un matriz de 15 variables y 32.028 filas de datos.
## [1] 32028 15
Estructura de los Datos: Se evaluaron los tipos de datos y su estructura general, con el fin de garantizar la correcta lectura de los valores y tipos. Valores Nulos: No se observó la existencia de valores nulos en las variables de interés.
Rango de Fechas: Las fechas mínimas y máximas de emisión de las pólizas fueron revisadas para detectar posibles inconsistencias.
Estadísticos relevantes: Se verificó los principales estadísticos con la finalidad de hacernos una idea de la forma de las distribuciones de frecuencia de las variables numéricas Prima Anual y Suma Asegurada, y se puede anticipar que las mismas aparentan no siguir una distribución normal.
Tabla 1.1
Estadísticos relevantes en Prima Anual
summary_table_prima_anual <- Polizas_Emitidas %>%
summarise(
Min_Prima_Anual = min(prima_anual, na.rm = TRUE),
Q1_Prima_Anual = quantile(prima_anual, 0.25, na.rm = TRUE),
Median_Prima_Anual = median(prima_anual, na.rm = TRUE),
Mean_Prima_Anual = mean(prima_anual, na.rm = TRUE),
Q3_Prima_Anual = quantile(prima_anual, 0.75, na.rm = TRUE),
Max_Prima_Anual = max(prima_anual, na.rm = TRUE),
)
print(summary_table_prima_anual)## Min_Prima_Anual Q1_Prima_Anual Median_Prima_Anual Mean_Prima_Anual
## 1 6.84 406.32 1115.4 6422.432
## Q3_Prima_Anual Max_Prima_Anual
## 1 3692.76 1153950
Tabla 1.2
Estadísticos relevantes en Suma Asegurada
summary_table_suma_aseg <- Polizas_Emitidas %>%
summarise(
Min_Suma_Aseg = min(suma_aseg, na.rm = TRUE),
Q1_Suma_Aseg = quantile(suma_aseg, 0.25, na.rm = TRUE),
Median_Suma_Aseg = median(suma_aseg, na.rm = TRUE),
Mean_Suma_Aseg = mean(suma_aseg, na.rm = TRUE),
Q3_Suma_Aseg = quantile(suma_aseg, 0.75, na.rm = TRUE),
Max_Suma_Aseg = max(suma_aseg, na.rm = TRUE)
)
print(summary_table_suma_aseg)## Min_Suma_Aseg Q1_Suma_Aseg Median_Suma_Aseg Mean_Suma_Aseg Q3_Suma_Aseg
## 1 0.01 5000 13971.06 77196.66 43170.78
## Max_Suma_Aseg
## 1 24399116
Figura 1.3
Histograma de Prima Anual
ggplot(data, aes(x = prima_anual)) +
geom_histogram(binwidth = 1000, fill = "blue", color = "black", alpha = 0.7) +
labs(title = "Histograma de Prima Anual",
x = "Prima Anual",
y = "Frecuencia") +
theme_minimal()Nota: Distribución de valores en la variable Prima Anual cargados a la izquierda
Figura 1.4
Histograma de Suma Asegurada
ggplot(data, aes(x = suma_aseg / 1000000)) + # Convertir a millones
geom_histogram(binwidth = 0.5, fill = "green", color = "black", alpha = 0.7) +
labs(title = "Histograma de Suma Asegurada",
x = "Suma Asegurada (Millones)",
y = "Frecuencia") +
xlim(0, 25) +
scale_x_continuous(labels = scales::label_number(scale = 1)) +
theme_minimal()Nota: Distribución de valores en la variable Suma Asegurada
En esta etapa, se utilizaron transformaciones logarítmicas en las variables Prima Anual y Suma Asegurada para identificar posibles valores atípicos (outliers). Mediante el uso de gráficos boxplot y estadística descriptiva; se identificaron los valores que se alejaban significativamente del comportamiento promedio, y se realizó una corrección o eliminación de estos valores.
Figura 2.1
Boxplot de Prima Anual transformada
# Transformación a logaritmo natural y creación de boxplot de los datos
log_prima_anual <- log(data$prima_anual)
boxplot(log_prima_anual, main = "Boxplot de Prima Anual Transformada", ylab = "Log(Prima Anual)")Nota: Previamente se realizó una transformación de los datos de prima anual a través del logaritmo para aproximarlo a datos de una distribución normal.
Figura 2.2
Boxplot de Suma Asegurada transformada
# Transformación a logaritmo natural y creación de boxplot de los datos
log_suma_aseg <- log(data$suma_aseg)
boxplot(log_suma_aseg, main = "Boxplot de la Suma Asegurada Transformada", ylab = "Log(Suma Asegurada)")Nota: Previamente se realizó una transformación de los datos de prima anual a través del logaritmo para aproximarlo a datos de una distribución normal.
Tabla 2.3
Identificación de valores atípicos en el espacio transformado en la variable Prima Anual
# Identificación de valores atípicos en el espacio transformado y reversión de la transformación logarítmica de outliers de la variable Prima Anual
outliers_prima_anual_transformada <- boxplot.stats(log_prima_anual)$out
outliers_prima_anual_original <- exp(outliers_prima_anual_transformada)
print(outliers_prima_anual_original)## [1] 135539.76 7.08 528000.00 156679.20 248994.12 184443.24
## [7] 213041.04 224293.56 194115.48 237008.16 137837.16 210575.40
## [13] 102116.88 133342.20 106845.36 562453.68 300000.00 154477.20
## [19] 457381.56 152150.64 7.08 357500.64 197260.32 126060.48
## [25] 149661.12 140498.64 129600.00 900000.00 112320.00 743326.44
## [31] 160520.04 114660.00 127352.88 167432.64 780000.00 211458.00
## [37] 171349.80 210000.00 133186.80 179494.32 105037.20 166067.04
## [43] 257220.00 147800.16 114660.00 12.00 245266.80 252000.00
## [49] 550105.44 158154.60 115200.00 397261.32 268321.32 192293.16
## [55] 287211.00 137836.68 143802.72 216750.24 121446.60 139235.52
## [61] 104814.60 120393.36 137837.16 103152.24 125846.64 177093.00
## [67] 139872.48 378213.60 137837.16 123751.32 133186.80 106890.36
## [73] 191473.92 393111.60 137837.16 184555.80 122550.72 180000.00
## [79] 131178.12 12.00 110472.12 120734.52 457235.40 224707.92
## [85] 113741.76 139235.52 219857.28 113127.96 388800.00 281369.76
## [91] 172740.84 127860.00 720000.00 109212.36 127986.72 283969.68
## [97] 578565.12 119020.80 277058.52 125892.36 216000.00 281830.68
## [103] 110461.08 859517.64 135971.52 12.00 108000.00 172687.56
## [109] 177093.00 198000.00 408086.04 158116.08 105729.00 147744.00
## [115] 108000.00 7.08 192000.00 113438.76 160801.32 566100.84
## [121] 577865.64 214684.68 137604.72 144000.00 108377.64 175768.44
## [127] 115403.64 261038.28 150347.16 139937.04 111790.68 143375.40
## [133] 143000.28 139322.52 132686.40 151944.60 111583.68 138600.00
## [139] 210000.00 205102.20 151944.60 156000.00 1029314.40 109632.48
## [145] 110082.60 168000.00 119602.32 112320.00 189283.08 117866.28
## [151] 7.08 105564.24 115200.00 347521.92 312000.00 145151.88
## [157] 1153949.52 517291.56 114660.00 220922.28 125053.08 120000.00
## [163] 287211.00 139235.52 110939.16 114368.28 157859.64 352837.44
## [169] 348315.60 139800.00 293817.00 222721.68 180000.00 144995.88
## [175] 143651.76 106520.52 108000.00 292001.64 12.00 129099.24
## [181] 104814.60 261302.16 139235.52 385038.12 6.84 101213.64
## [187] 12.00 131037.24 149722.32 887546.64 106520.52 308376.24
## [193] 432000.00 114194.40 457235.40 120000.00 432040.32 125892.36
## [199] 281830.68 137837.16 133099.68 324000.00 216000.00 145090.44
## [205] 125892.36 152439.84 551185.56 7.08 508540.08 156000.00
## [211] 139815.60 148898.04 160520.04 271962.24 102849.00 216000.00
## [217] 216000.00 404304.60 132892.56 195436.68 110958.96 562453.68
## [223] 292001.64 139800.00 152658.24 117580.92 128040.00 327950.88
## [229] 216750.24 252230.16 204053.04 208441.92 386792.88 127811.40
## [235] 215758.92 204128.76 304817.28 332726.52 253171.68 306580.20
## [241] 129600.00 144003.48 153014.04 692968.08 1103105.52 652817.64
## [247] 154118.04 151167.12 780000.00 136800.00 127602.00 286505.88
## [253] 148490.04 120666.72 181624.80 145123.68 148929.96 148898.04
## [259] 161966.64 132236.76 307030.08 253171.68 439256.76 129190.68
## [265] 179506.80 548598.36 269082.36 180000.00 303228.48 224190.24
## [271] 222101.64 107289.84 545753.40 184142.04 347361.24 123546.36
## [277] 129783.48 207606.60 119503.44 112291.92 142809.96 281369.76
## [283] 115200.00
Nota: Se identificaron 281 valores atípicos de la variable Prima Anual
Tabla 2.4
Identificación de valores atípicos en el espacio transformado en la variable Suma Asegurada
# Identificación de valores atípicos en el espacio transformado y reversión de la transformación logarítmica de outliers de la variable Suma Asegurada
outliers_suma_aseg_transformada <- boxplot.stats(log_suma_aseg)$out
outliers_suma_aseg_original <- exp(outliers_suma_aseg_transformada)
print(outliers_suma_aseg_original)## [1] 184.42 2726361.51 1303532.04 3244373.14 3327416.81 1960000.00
## [7] 2000000.00 4000000.00 1188615.58 1430066.22 2040294.09 4110000.00
## [13] 3000000.00 3270179.70 140.00 1960000.00 3000000.00 3000000.00
## [19] 114.33 1458976.96 190.00 3327416.81 3500000.00 189.01
## [25] 2590765.62 7811857.46 189.01 1308976.96 2979172.42 2000000.00
## [31] 138.44 106.11 1303532.04 4726020.87 180.00 4564691.75
## [37] 1458976.96 2525777.31 1351701.17 1200000.00 102.60 7500000.00
## [43] 1200000.00 23551574.13 1308976.96 1850000.00 2954605.65 2233280.00
## [49] 1184520.75 120.00 2500000.00 1258996.05 70.00 108.26
## [55] 1220026.50 128.91 3237416.81 166.75 1114692.05 140.00
## [61] 1193662.80 1243366.38 3000000.00 2292106.04 2687639.21 1823309.98
## [67] 67.72 1200000.00 1659802.84 3.01 3000000.00 3327416.81
## [73] 100.00 1823309.98 1168174.47 2981909.71 7325355.24 150.00
## [79] 126.71 1308976.96 1458976.96 101.37 2000000.00 141.00
## [85] 2.40 1517269.37 2712565.30 1823309.98 3327416.81 2119965.44
## [91] 3271653.92 3550615.84 89.04 1423924.04 3327416.81 180.00
## [97] 1100000.00 19.00 1500000.00 108.26 1500000.00 1100000.00
## [103] 7.50 1551242.09 2000000.00 102.60 150.00 126.71
## [109] 16607142.86 3327416.81 2525777.31 126.71 154.33 179.85
## [115] 3970000.00 70.00 1739832.94 1500000.00 165.00 1258996.05
## [121] 5609328.39 1150750.95 138.44 6350492.29 2954605.65 4796398.00
## [127] 141.00 3327416.81 1220026.50 4796398.00 114.33 3319261.07
## [133] 2653700.00 138.44 112.00 1338329.79 1729381.50 4500000.00
## [139] 3907913.38 0.01 6000000.00 2712565.30 136.60 2886025.77
## [145] 1458976.96 1236889.51 2712565.30 132.74 3244373.14 136.60
## [151] 1651259.40 2954605.65 1276408.35 1355000.00 2000000.00 1275000.00
## [157] 2000000.00 99.85 2935736.27 1423924.04 126.71 1436920.85
## [163] 126.71 2954605.65 1200000.00 1131496.50 1236106.94 1258996.05
## [169] 1308976.96 4796398.00 1300000.00 1844718.55 5.34 1500000.00
## [175] 78.15 3666460.86 2551175.00 1765273.75 144.55 1220026.50
## [181] 2233280.00 166.75 3456781.97 100.00 2000000.00 3045000.00
## [187] 3970000.00 1594342.57 8025911.72 150.00 0.01 1717341.65
## [193] 3327416.81 2236298.66 8867536.00 2000000.00 189.01 1517269.37
## [199] 1117896.50 2954605.65 1230000.00 1823309.98 8867536.00 1259370.21
## [205] 1960000.00 43.93 3667975.15 2356946.45 1700000.00 1765273.75
## [211] 184.47 2877236.13 1307816.26 3327416.81 3667975.15 1300000.00
## [217] 1115000.00 2954605.65 154.33 2712565.30 168.00 3578093.10
## [223] 3500000.00 2590765.62 2108929.20 3244373.14 126.71 1200000.00
## [229] 186.00 3237416.81 1099627.24 92.00 1950000.00 52.50
## [235] 66.65 180.54 1765273.75 196.00 4000000.00 145.00
## [241] 16607142.86 27.25 1971361.26 3237416.81 5342359.01 1436920.85
## [247] 3045000.00 3237416.81 67.73 1823309.98 2651441.88 1276408.35
## [253] 3000000.00 141.00 9.51 106.11 179.85 3608136.18
## [259] 1633649.65 180.00 1368734.50 3500000.00 136.60 1879280.80
## [265] 4900520.29 1451314.92 43.33 3327416.81 1651259.40 100.00
## [271] 4796398.00 189.01 2651441.88 180.00 1214757.09 1117896.50
## [277] 1250000.00 191.55 1220026.50 56.40 1258996.05 1340716.79
## [283] 3000000.00 75.00 1765273.75 101.70 1796434.54 4055577.60
## [289] 138.44 1128296.40 167.15 5609328.39 3237416.81 3970000.00
## [295] 166.75 1651259.40 1560655.80 1500000.00 24399115.93 3327416.81
## [301] 1214757.09 1368734.50 3456781.97 126.71 1432500.00 1295000.00
## [307] 1200000.00 16607142.86 1782409.00 5509430.98 3000000.00 100.00
## [313] 2233280.00 4500000.00 1169187.51 73.00 1488539.89 1739969.79
## [319] 196.00 6350492.29 1276408.35 170.25 1168174.47 189.01
## [325] 82.51 3237416.81 2935736.27 1308976.96 1879280.80 3327416.81
## [331] 0.01 3000000.00 15.00 2000000.00 179.85 1276408.35
## [337] 110.92 2226906.75 1300000.00 1607359.43 3275430.87 2525777.31
## [343] 3237416.81 1303532.04 1823309.98 50.76 1128015.00 1214757.09
## [349] 1175000.00 0.20 1308976.96 3777253.52 2657714.23 125.00
## [355] 1308976.96 192.80 0.02 2000000.00 2000000.00 150.00
## [361] 3244373.14 165.00 102.60 1258996.05 3200000.00 5084097.66
## [367] 1651259.40 7811857.46 4055577.60 1303532.04 1399772.90 1355680.96
## [373] 2000000.00 3237416.81 3237416.81 15370517.77 5693590.84 7325355.24
## [379] 196.00 50.76 2075790.66 1665326.46 45.15 1651259.40
## [385] 3786594.34 3.17 1193662.80 3907913.38 1405615.60 163.00
## [391] 4796398.00 1488539.89 4357008.25 1703223.42 3237416.81 126.71
## [397] 1551242.09 48.36 1458976.96 1114692.05 168.76 50.76
## [403] 189.01 1200000.00 6.00 1131496.50 3237416.81 1100000.00
## [409] 4779600.00 2590546.06 92.00 170.25 1458976.96 6500000.00
## [415] 2000000.00 1128015.00 1500000.00 1303532.04 150.00 49.37
## [421] 1458976.96 2954605.65 166.75 49.37 1128015.00 1300000.00
## [427] 3275430.87 110.92 1729381.50 1250000.00 2292106.04 4798984.00
## [433] 2954605.65 1121176.26 2000000.00 1440000.00 5200000.00 170.25
## [439] 1722000.00 180.00 1640365.51 1295000.00 1461121.25 1500000.00
## [445] 3275430.87 1451314.92 100.00 1298968.44 2877236.13 1295000.00
## [451] 1551242.09 141.00 175.00 166.75 1358000.00 1128483.54
## [457] 90.00 2107185.61 1458976.96 1552521.60 4796398.00 1193662.80
## [463] 3907913.38 158.23 1200000.00
Nota: Se identificaron 463 valores atípicos de la variable Suma Asegurada
Tabla 2.5
Resultados de la base depurada (“data_cleaned”)una vez eliminados los valores atipicos
# Definir función de comparación con tolerancia
near <- function(x, y, tol = .Machine$double.eps^0.5) {
abs(x - y) < tol
}
# Filtro de los outliers de la base de datos original utilizando comparación con tolerancia
indices_sin_outliers_prima_anual <- sapply(data$prima_anual, function(x) !any(near(x, outliers_prima_anual_original)))
indices_sin_outliers_suma_aseg <- sapply(data$suma_aseg, function(x) !any(near(x, outliers_suma_aseg_original)))
# Combinación de las condiciones para eliminar cualquier fila que sea un outlier en cualquiera de los dos conjuntos
data_cleaned <- data[indices_sin_outliers_prima_anual & indices_sin_outliers_suma_aseg, ]
# Verificación de las dimensiones del nuevo conjunto de datos limpio
print(dim(data_cleaned))## [1] 31428 15
Nota: La base depurada de valores atípicos “data_cleaned” quedó conformada por un matriz de 15 variables y 31.428 filas de datos.
El análisis exploratorio se centró en la relación entre las variables Prima Emitida, Sucursal y Ramo Comercial. Se construyeron gráficos de barras y tablas de contingencia para investigar si existe alguna relación significativa entre estos factores.
Se evidenció la existencia de 33 combinaciones existentes en la base de Pólizas Emitidas, entre las variables Sucursal y Ramo Comercial. Se realizó un análisis de estadísticos de dichas combinaciones, así como un gráfico de barras de Ramo Comercial y Sucursal para ilustrar la forma como se correlacionan dichas variables, en función de la Prima Emitida.
Tabla 3.1
Tabla de estadísticos de las combinaciones de las variables Sucursal y Ramo Comercial
# Agrupación de los datos por 'sucursal' y 'ramo_comercial' y cáculo del resumen estadístico
summary_data <- data_cleaned %>%
group_by(sucursal, ramo_comercial) %>%
summarise(
media_prima_emitida = mean(prima_emitida, na.rm = TRUE),
mediana_prima_emitida = median(prima_emitida, na.rm = TRUE),
sd_prima_emitida = sd(prima_emitida, na.rm = TRUE),
n = n()
) %>%
ungroup()
# Resumen estadístico
print(summary_data)## # A tibble: 33 × 6
## sucursal ramo_comercial media_prima_emitida mediana_prima_emitida
## <chr> <chr> <dbl> <dbl>
## 1 AMBATO BUEN USO DE ANTICIPO 353. 147.
## 2 AMBATO FIEL CUMPLIMIENTO DE CONT… 159. 64.8
## 3 AMBATO GARANTIA ADUANERA 266. 266.
## 4 AMBATO GARANTIAS JUDICIALES 358. 358.
## 5 AMBATO SERIEDAD DE OFERTA 69.9 50
## 6 CUENCA BUEN USO DE ANTICIPO 567. 203.
## 7 CUENCA FIEL CUMPLIMIENTO DE CONT… 245. 67.0
## 8 CUENCA GARANTIA ADUANERA 724. 336.
## 9 CUENCA GARANTIAS JUDICIALES 202. 57.5
## 10 CUENCA SERIEDAD DE OFERTA 104. 74.8
## # ℹ 23 more rows
## # ℹ 2 more variables: sd_prima_emitida <dbl>, n <int>
Figura 3.2
Gráfico de barras de las variables Sucursal y Ramo Comercial
# Agregación de los datos por sucursal y ramo comercial
data_aggregated <- data_cleaned %>%
group_by(ramo_comercial, sucursal) %>%
summarize(total_prima_emitida = sum(prima_emitida, na.rm = TRUE))
# (Ver) Creación de gráfico de barras con los datos agregados
ggplot(data_aggregated, aes(x = ramo_comercial, y = total_prima_emitida / 1e6, fill = sucursal)) +
geom_bar(stat = "identity", position = "dodge") +
labs(
title = "Total de Prima Emitida por Ramo Comercial y Sucursal",
x = "Ramo Comercial",
y = "Total Prima Emitida (Millones de USD)"
) +
scale_y_continuous(
labels = scales::comma, # Para formatear los números con comas en millones
breaks = seq(0, max(data_aggregated$total_prima_emitida / 1e6), by = 0.2) # Saltos de 0.2 millones de USD
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))b. Dependencia Estadística: A través de la prueba de chi-cuadrado, se identificó una dependencia estadísticamente significativa entre las variables Sucursal y Ramo Comercial. El resultado de la prueba muestra una dependencia estadísticamente significativa entre las variables Sucursal y Ramo Comercial, sin embargo, algunas celdas en la tabla de contingencia tienen un número de casos esperado menor a 5, lo que podría invalidar el test de chi-cuadrado.
Tabla 3.3
Resultados de la prueba Chi-cuadrado entre Sucursal y Ramo Comercial
# Cargar librerías necesarias
library(dplyr)
library(knitr)
# Filtrar datos limpios sin valores faltantes en las variables 'sucursal' y 'ramo_comercial'
data_cleaned <- data_cleaned %>%
filter(!is.na(sucursal) & !is.na(ramo_comercial))
# Crear tabla de contingencia entre 'sucursal' y 'ramo_comercial'
tabla_contingencia <- table(data_cleaned$sucursal, data_cleaned$ramo_comercial)
# Realizar el test de Chi-cuadrado
test_chi <- chisq.test(tabla_contingencia)
# Crear una tabla con los resultados clave
resultado_chi <- data.frame(
Estadístico = test_chi$statistic, # Valor del estadístico de chi-cuadrado
Grados_de_libertad = test_chi$parameter, # Grados de libertad
Valor_p = test_chi$p.value # Valor p
)
# Agregar una columna para la interpretación
resultado_chi$Interpretación <- ifelse(resultado_chi$Valor_p < 0.05,
"Dependencia significativa",
"No hay dependencia significativa")
# Imprimir la tabla con los resultados
kable(resultado_chi)| Estadístico | Grados_de_libertad | Valor_p | Interpretación | |
|---|---|---|---|---|
| X-squared | 7778.766 | 36 | 0 | Dependencia significativa |
Nota: El resultado obtenido del Chi-cuadrado indica dependencia entre las variables Sucursal y Ramo Comercial
Para observar el comportamiento de la variable Prima Emitida a lo largo del tiempo, se realizó un análisis temporal. Los datos fueron agrupados por año y ramo comercial, y se generaron gráficos de líneas para ilustrar la evolución de la prima.
Evolución Temporal: Se observó una tendencia de crecimiento y declive en la variable Prima Emitida Total por año a lo largo del tiempo.
Se identificaron variaciones en la evolución de la Prima Emitida entre los distintos ramos comerciales, con algunos mostrando un mayor crecimiento que otros.
La tendencia creciente, sobre de la de años 2016 a 2019 parece responder a un incremento de la Prima Anual en los ramos de Buen Uso de Anticipo, Fiel Cumplimiento de Contrato y Garantía Aduanera, posiblemente los dos primeros por una actividad importante de inversión por parte del estado. El declive posterior parece responder a la coyuntura de la declaración de pandemia mundial por Sars CoV 2, en la cual el mundo entero paralizó por 2,5 años consecutivos sus actividades.
Figura 4.1
Evolución de la Prima Anual total
# Asegurarmiento de que 'fecha_emision' esté en formato de fecha
data_cleaned$fecha_emision <- as.Date(data_cleaned$fecha_emision)
# Extracción el año de la fecha
data_cleaned$ano_emision <- format(data_cleaned$fecha_emision, "%Y")
# Agregación los datos por año
data_aggregated <- data_cleaned %>%
group_by(ano_emision) %>%
summarize(prima_anual_total = sum(prima_anual, na.rm = TRUE))
# Creación de gráfico de series temporales con el eje y en millones de dólares
ggplot(data_aggregated, aes(x = as.numeric(ano_emision), y = prima_anual_total / 1e6)) +
geom_line(color = "blue") + # Línea de la serie temporal
geom_point(color = "red") + # Puntos en cada año
labs(
title = "Evolución de la Prima Anual a lo Largo del Tiempo",
x = "Año",
y = "Prima Anual Total (Millones de USD)"
) +
scale_y_continuous(
labels = scales::comma, # Formatear los números con comas
breaks = scales::pretty_breaks(n = 10) # Ajustar los saltos del eje y
) +
scale_x_continuous(breaks = seq(min(as.numeric(data_aggregated$ano_emision)),
max(as.numeric(data_aggregated$ano_emision)), by = 1)) +
theme_minimal()Figura 4.1
Evolución de la Prima Anual por Ramo Comercial
# Agregación de los datos por año y por ramo_comercial
data_aggregated <- data_cleaned %>%
group_by(ano_emision, ramo_comercial) %>%
summarize(prima_anual_total = sum(prima_anual, na.rm = TRUE), .groups = 'drop')
# Creación de gráfico de series temporales para cada ramo_comercial
ggplot(data_aggregated, aes(x = as.numeric(ano_emision), y = prima_anual_total / 1e6, color = ramo_comercial, group = ramo_comercial)) +
geom_line() + # Línea de la serie temporal
geom_point() + # Puntos en cada año
labs(
title = "Evolución de la Prima Anual por Ramo Comercial a lo Largo del Tiempo",
x = "Año",
y = "Prima Anual Total (Millones de USD)",
color = "Ramo Comercial"
) +
scale_y_continuous(
labels = scales::comma, # Formatear los números con comas
breaks = scales::pretty_breaks(n = 10) # Ajustar los saltos del eje y
) +
scale_x_continuous(breaks = seq(min(as.numeric(data_aggregated$ano_emision)),
max(as.numeric(data_aggregated$ano_emision)), by = 1)) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Ajuste de ángulo para etiquetas del eje xFinalmente, se realizó una segmentación de clientes utilizando la Suma Asegurada y el Ramo Comercial como variables clave. Se utilizó el método de agrupamiento k-means para identificar diferentes grupos de clientes, y se analizaron las características de cada clúster.
Figura 5.1
Identificación de los clusters por medio de su distribución de la Suma Asegurada
# Selección de variables para el agrupamiento
data_segmentacion <- data_cleaned %>%
select(tipo_persona, tipo_agente, suma_aseg)
# Conversión de listas en columnas a vectores simples
data_segmentacion_clean <- data_segmentacion %>%
mutate(
tipo_persona = map_chr(tipo_persona, ~ as.character(.x[1])),
tipo_agente = map_chr(tipo_agente, ~ as.character(.x[1]))
) %>%
distinct() # Eliminar duplicados basados en todas las columnas
# Clusters
set.seed(123) # Para reproducibilidad
kmeans_result <- kmeans(data_segmentacion_clean %>% select(suma_aseg), centers = 3)
# Asignación de clústeres al dataframe
data_segmentacion_clean <- data_segmentacion_clean %>%
mutate(cluster = factor(kmeans_result$cluster))
summary_clusters <- data_segmentacion_clean %>%
group_by(cluster) %>%
summarise(
count = n(),
mean_suma_aseg = mean(suma_aseg, na.rm = TRUE),
.groups = 'drop'
)
ggplot(data_segmentacion_clean, aes(x = suma_aseg, fill = cluster)) +
geom_histogram(binwidth = 1000, position = 'dodge') +
labs(title = "Distribución de la Suma Asegurada por Clúster",
x = "Suma Asegurada (millones de $)",
y = "Frecuencia") +
scale_x_log10(
labels = scales::label_dollar(scale = 1e-6, suffix = "M") # Formatear en millones
) +
coord_cartesian(ylim = c(0, 15000)) + # Ajustar el límite del eje y
theme_minimal()Figura 5.2
Identificación de los clusters por medio de su valor de Suma Asegurada
ggplot(data_segmentacion_clean, aes(x = suma_aseg, y = tipo_persona, color = cluster)) +
geom_point(size = 3, alpha = 0.6) +
scale_x_log10(labels = scales::label_dollar(scale = 1e-6, suffix = "M")) + # Formatear en millones
labs(title = "Segmentación de Clústeres por Suma Asegurada y Tipo de Persona",
x = "Suma Asegurada (Millones de $)",
y = "Tipo de Persona",
color = "Clúster") +
theme_minimal()Tabla 5.3
Comportamiento por Ramo Comercial
# Selección de variables para el agrupamiento
data_segmentacion <- data_cleaned %>%
select(tipo_persona, tipo_agente, suma_aseg)
# Conversión de listas en columnas a vectores simples
data_segmentacion_clean <- data_segmentacion %>%
mutate(
tipo_persona = map_chr(tipo_persona, ~ as.character(.x[1])),
tipo_agente = map_chr(tipo_agente, ~ as.character(.x[1]))
) %>%
distinct() # Eliminar duplicados basados en todas las columnas
# Verificación de los primeros registros para confirmar la transformación
head(data_segmentacion_clean)# Agrupación y resumen de datos para obtener información sobre cada segmento
data_segmentacion_summary <- data_segmentacion_clean %>%
group_by(tipo_persona, tipo_agente) %>%
summarise(
total_suma_aseg = sum(suma_aseg, na.rm = TRUE),
promedio_suma_aseg = mean(suma_aseg, na.rm = TRUE),
cuenta_clientes = n(),
.groups = 'drop'
)Figura 5.4
Total de Suma Asegurada por Tipo de Persona y Tipo de Agente
# Gráfico de suma asegurada por tipo de persona y tipo de agente
ggplot(data_segmentacion_summary, aes(x = tipo_persona, y = total_suma_aseg, fill = tipo_agente)) +
geom_bar(stat = "identity", position = "dodge") +
scale_y_continuous(labels = label_number(scale = 1e-6, suffix = "M")) + # Escalar y etiquetar el eje y en millones
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Total Suma Asegurada por Tipo de Persona y Tipo de Agente",
x = "Tipo de Persona",
y = "Total Suma Asegurada (Millones de $)")Figura 5.5
Promedio de Suma Asegurada por Tipo de Persona y Tipo de Agente
# Gráfico de promedio de suma asegurada por tipo de persona y tipo de agente
ggplot(data_segmentacion_summary, aes(x = tipo_persona, y = promedio_suma_aseg, fill = tipo_agente)) +
geom_bar(stat = "identity", position = "dodge") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Promedio Suma Asegurada por Tipo de Persona y Tipo de Agente",
x = "Tipo de Persona",
y = "Promedio Suma Asegurada")Este análisis ha permitido identificar aspectos clave sobre la calidad de los datos, la presencia de valores atípicos, la correlación entre las variables Sucursal y Ramo Comercial, la evolución de la Prima Emitida a lo largo del tiempo y la segmentación de clientes. Estos hallazgos proporcionan una base sólida para la toma de decisiones estratégicas en la compañía de seguros, así como para futuros análisis más detallados.