Prediction and Visualization of Motor Vehicle Insurance Premium
List of Library
library(tidyverse)
library(tidymodels)
library(ggplot2)
library(plotly)
library(skimr)
library(lubridate)
library(forecast)
library(tseries)Background
Pencatatan premi pada asuransi kendaraan bermotor (Motor Vehicle Insurance) bisa dikelompokkan menjadi :
- Berdasarkan Tahun Produksi (Production Year), dimana produksi premi pada periode cutoff akhir tahun
- Berdasarkan Tahun Polis (Policy Year), dimana produksi premi tahunan nya / akhir dari polis tersebut
- Berdasarkan Tahun Underwriting (Underwriting Year), dimana produksi premi berdasarkan tahun underwriter menilai risiko tersebut
Sehingga dibutuhkan visualisasi yang bisa memberikan informasi atas ketiga kategori pencatatan premi tersebut sebagai dasar perusahaan asuransi dalam meningkatkan performa perusahaan
Premi asuransi kendaraan bermotor juga dipengaruhi oleh waktu, sehingga dibutuhkan algoritma yang sesuai untuk digunakan dalam melakukan prediksi pencatatan premi dari ketiga kategori tersebut (Time Series Prediction)
Dalam asuransi kendaraan bermotor erat hubungannya dengan klaim, maka dari itu akan digunakan algoritma Machine Learning dalam melakukan prediksi kendaraan yang akan melakukan klaim atau tidak (berdasarkan data historis klaim suatu unit kendaraan dan profile dari customer).
Read Data
Data yang digunakan merupakan data produksi premi kendaraan bermotor yang terdiri dari beberapa segment / Business Channel yaitu :
- Direct Segment
- Agency Segment
- Leasing Segment
- Bank Segment
- Dealer Segment
Data Preprocess
Pada tahap ini kita akan melakukan pengelompokkan beberapa feauture yang akan kita gunakan untuk visualisasi pencatatan premi berdasarkan ketiga kategori di atas dan juga nantinya digunakan untuk pembuatan model time series dalam melakukan prediksi dari ketiga kategori pencatatan premi tersebut.
Select Columns
report <- report %>%
select(NO_MONTH, MONTH, SEGMENT, POLICYNO,TRANSACTION_TYPE,INCEPTION,EXPIRY,BOOKING_DATE,USER_APPROVE_DATE,TOC,TOC_DESCRIPTION,TOC_GROUP,TOC_GROUP_DESCRIPTION,TSI,PREMIUM_GROSS,DISCOUNT,COMMISSION,VAT,TAX,POLICY_FEE,STAMP_DUTY,VEHICLE_CATEGORY,VEHICLE_TYPE,GROUP_MV) %>% mutate_if(is.integer,as.numeric)
head(report)## NO_MONTH MONTH SEGMENT POLICYNO TRANSACTION_TYPE
## 1 1 January Direct 11002011900022 NEW
## 2 1 January Agent 11502011900001 NEW
## 3 1 January Agent 11502011900001-000001 NEW
## 4 1 January Agent 11502011900001-000002 NEW
## 5 1 January Agent 11502011900001-000003 NEW
## 6 1 January Agent 11502011900001-000004 NEW
## INCEPTION EXPIRY BOOKING_DATE USER_APPROVE_DATE TOC TOC_DESCRIPTION
## 1 12/14/2018 12/14/2019 01/09/2019 01/09/2019 201 PSAKBI
## 2 12/04/2018 12/27/2021 01/02/2019 01/02/2019 201 PSAKBI
## 3 12/04/2018 12/04/2020 01/02/2019 01/02/2019 201 PSAKBI
## 4 12/20/2018 12/20/2021 01/02/2019 01/02/2019 201 PSAKBI
## 5 12/26/2018 12/26/2021 01/02/2019 01/02/2019 201 PSAKBI
## 6 12/27/2018 12/27/2021 01/02/2019 01/02/2019 201 PSAKBI
## TOC_GROUP TOC_GROUP_DESCRIPTION TSI PREMIUM_GROSS DISCOUNT
## 1 2 Motor Vehicle 165750000 5347933 -1336983
## 2 2 Motor Vehicle 0 0 0
## 3 2 Motor Vehicle 37000000 207200 0
## 4 2 Motor Vehicle 65000000 637000 0
## 5 2 Motor Vehicle 78000000 764400 0
## 6 2 Motor Vehicle 104000000 582400 0
## COMMISSION VAT TAX POLICY_FEE STAMP_DUTY VEHICLE_CATEGORY
## 1 0 0 0 44000 6000 Non Bus / Non Truck
## 2 0 0 0 120000 0 #N/A
## 3 -51800 0 1295 0 0 Non Bus / Non Truck
## 4 -159250 0 3981 0 0 Truck / Pick Up
## 5 -191100 0 4778 0 0 Truck / Pick Up
## 6 -145600 0 3640 0 0 Non Bus / Non Truck
## VEHICLE_TYPE GROUP_MV
## 1 Sedan MV 4
## 2 #N/A MV 4
## 3 Minibus MV 4
## 4 Light Truck MV 4
## 5 Pick Up/Box MV 4
## 6 Minibus MV 4
Keterangan :
NO_MONTH : Bulan ke- premi tersebut di catat pada sistem
MONTH : Bulan premi di catat pada sistem
SEGMENT : Segment untuk sumber bisnsis asuransi di dapatkan
POLICYNO : No Polis atau no master polis
TRANSACTION_TYPE : Jenis transaksi asuransi, apakah transaksi polis baru, perubahan, atau pembatalan
INCEPTION : Periode polis dimulai
EXPIRY : Periode polis berakhir
BOOKING_DATE : Tanggal premi dicatat sebagai produksi pada sistem
USER_APPROVE_DATE : Tanggal premi di invorce oleh underwriter
TOC : Type of Coverage (jenis cover asuransi)
TOC_DESCRIPTION : Deskripsi jenis cover asuransi
TOC_GROUP : Grup dari jenis cover asuransi
TOC_GROUP_DESCRIPTION : Deskripsi jenis cover asuransi
TSI : Total sum Insured (Harga pertanggungan Asuransi)
PREMIUM_GROSS : Premi kotor asuransi
DISCOUNT : Diskon premi asuransi untuk customer
COMMISION : Komisi asuransi untuk agen, broker, atau perantara
VAT : Pajak pertambahan nilai (ppn 10%) dari premi kotor asuransi
TAX : Pajak penghasilan (pph berdasarkan kategori perusahaan yang dikenakan pajak)
POLICY_FEE : Biaya administrasi polis asuransi
STAMP_DUTY : Biaya materai
VEHICLE_CATEGORY : Kategori kendaraan yang diasuransikan
VEHICLE_TYPE : Tipe kendaraan yang diasuransikan
GROUP_MV : Grup dari kendaraan yang diasuransikan, apakah Kendaraan Roda 2, Kendaraan Roda 4, atau truk tangki
Data Skimming
| Name | report |
| Number of rows | 42537 |
| Number of columns | 24 |
| _______________________ | |
| Column type frequency: | |
| factor | 13 |
| numeric | 11 |
| ________________________ | |
| Group variables | None |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| MONTH | 0 | 1 | FALSE | 12 | Dec: 23671, Nov: 7305, Aug: 1819, Oct: 1765 |
| SEGMENT | 0 | 1 | FALSE | 5 | Age: 18823, Lea: 18701, Dir: 4094, Dea: 888 |
| POLICYNO | 0 | 1 | FALSE | 39746 | 112: 7, 191: 7, 191: 7, 291: 7 |
| TRANSACTION_TYPE | 0 | 1 | FALSE | 3 | NEW: 31543, CAN: 9830, END: 1164 |
| INCEPTION | 0 | 1 | FALSE | 741 | 10/: 754, 11/: 585, 11/: 552, 10/: 437 |
| EXPIRY | 0 | 1 | FALSE | 1967 | 11/: 542, 11/: 517, 12/: 390, 10/: 319 |
| BOOKING_DATE | 0 | 1 | FALSE | 270 | 12/: 9191, 12/: 4436, 12/: 3975, 11/: 3355 |
| USER_APPROVE_DATE | 0 | 1 | FALSE | 270 | 12/: 9191, 12/: 4436, 12/: 3975, 11/: 3355 |
| TOC_DESCRIPTION | 0 | 1 | FALSE | 7 | Mot: 18354, Mot: 18055, Mot: 4552, PSA: 1296 |
| TOC_GROUP_DESCRIPTION | 0 | 1 | FALSE | 4 | emp: 34203, Mot: 8131, Pro: 127, Fir: 76 |
| VEHICLE_CATEGORY | 0 | 1 | FALSE | 153 | emp: 23704, Non: 10769, Mot: 6201, Tru: 1174 |
| VEHICLE_TYPE | 0 | 1 | FALSE | 29 | emp: 23704, Min: 8631, Mot: 6251, Sed: 867 |
| GROUP_MV | 0 | 1 | FALSE | 6 | emp: 23995, MV : 12202, MV : 6252, #N/: 39 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| NO_MONTH | 0 | 1 | 10.37 | 2.66 | 1 | 10 | 12 | 12 | 12 | ▁▁▁▁▇ |
| TOC | 0 | 1 | 210.74 | 12.64 | 101 | 201 | 220 | 220 | 221 | ▁▁▁▁▇ |
| TOC_GROUP | 0 | 1 | 1.99 | 0.08 | 1 | 2 | 2 | 2 | 2 | ▁▁▁▁▇ |
| TSI | 0 | 1 | 122150596.21 | 251322023.65 | -125000000 | 0 | 30698000 | 181000000 | 15000000000 | ▇▁▁▁▁ |
| PREMIUM_GROSS | 0 | 1 | 2651471.67 | 6579468.85 | -73180800 | 49000 | 389280 | 2297460 | 105310950 | ▁▁▇▁▁ |
| DISCOUNT | 0 | 1 | -497369.33 | 1501235.63 | -26327738 | -101760 | 0 | 0 | 18295200 | ▁▁▇▁▁ |
| COMMISSION | 0 | 1 | -153698.42 | 685983.62 | -18641269 | -100389 | 0 | 0 | 13880374 | ▁▁▇▁▁ |
| VAT | 0 | 1 | -13893.29 | 59891.06 | -1864127 | -8724 | 0 | 0 | 704011 | ▁▁▁▇▁ |
| TAX | 0 | 1 | 2837.88 | 16903.61 | -347010 | 0 | 0 | 2023 | 926249 | ▁▇▁▁▁ |
| POLICY_FEE | 0 | 1 | 5581.49 | 213865.24 | -510000 | 0 | 0 | 0 | 44000000 | ▇▁▁▁▁ |
| STAMP_DUTY | 0 | 1 | 812.33 | 2344.98 | -12000 | 0 | 0 | 0 | 12000 | ▁▁▇▂▁ |
Create New Columns
Pada tahap ini kita akan membuat beberapa kolom baru yang akan digunakan saat mendefinisikan tahun mulai produksi premi dan tahun berakhir masa asuransi nya
report$INCEPTION_YEAR <- year(mdy(report$INCEPTION))
report$EXPIRY_YEAR <- year(mdy(report$EXPIRY))
report$PERIOD_COUNT <- as.numeric(mdy(report$EXPIRY) - mdy(report$INCEPTION))
head(report)## NO_MONTH MONTH SEGMENT POLICYNO TRANSACTION_TYPE
## 1 1 January Direct 11002011900022 NEW
## 2 1 January Agent 11502011900001 NEW
## 3 1 January Agent 11502011900001-000001 NEW
## 4 1 January Agent 11502011900001-000002 NEW
## 5 1 January Agent 11502011900001-000003 NEW
## 6 1 January Agent 11502011900001-000004 NEW
## INCEPTION EXPIRY BOOKING_DATE USER_APPROVE_DATE TOC TOC_DESCRIPTION
## 1 12/14/2018 12/14/2019 01/09/2019 01/09/2019 201 PSAKBI
## 2 12/04/2018 12/27/2021 01/02/2019 01/02/2019 201 PSAKBI
## 3 12/04/2018 12/04/2020 01/02/2019 01/02/2019 201 PSAKBI
## 4 12/20/2018 12/20/2021 01/02/2019 01/02/2019 201 PSAKBI
## 5 12/26/2018 12/26/2021 01/02/2019 01/02/2019 201 PSAKBI
## 6 12/27/2018 12/27/2021 01/02/2019 01/02/2019 201 PSAKBI
## TOC_GROUP TOC_GROUP_DESCRIPTION TSI PREMIUM_GROSS DISCOUNT
## 1 2 Motor Vehicle 165750000 5347933 -1336983
## 2 2 Motor Vehicle 0 0 0
## 3 2 Motor Vehicle 37000000 207200 0
## 4 2 Motor Vehicle 65000000 637000 0
## 5 2 Motor Vehicle 78000000 764400 0
## 6 2 Motor Vehicle 104000000 582400 0
## COMMISSION VAT TAX POLICY_FEE STAMP_DUTY VEHICLE_CATEGORY
## 1 0 0 0 44000 6000 Non Bus / Non Truck
## 2 0 0 0 120000 0 #N/A
## 3 -51800 0 1295 0 0 Non Bus / Non Truck
## 4 -159250 0 3981 0 0 Truck / Pick Up
## 5 -191100 0 4778 0 0 Truck / Pick Up
## 6 -145600 0 3640 0 0 Non Bus / Non Truck
## VEHICLE_TYPE GROUP_MV INCEPTION_YEAR EXPIRY_YEAR PERIOD_COUNT
## 1 Sedan MV 4 2018 2019 365
## 2 #N/A MV 4 2018 2021 1119
## 3 Minibus MV 4 2018 2020 731
## 4 Light Truck MV 4 2018 2021 1096
## 5 Pick Up/Box MV 4 2018 2021 1096
## 6 Minibus MV 4 2018 2021 1096
Exploratory Data Analysis
hari terakhir pada tahun 2018
last_day_18 <- function(x) {
lastyear18 <- as.numeric(format(x, "%Y")) - (year(ymd(Sys.Date()))-2018)
last_date18 <- as.Date(sprintf('%s-12-31',lastyear18))
}
a<-last_day_18(Sys.Date())
a## [1] "2018-12-31"
hari terakhir pada tahun 2019
last_day_19 <- function(x) {
lastyear19 <- as.numeric(format(x, "%Y")) - (year(ymd(Sys.Date()))-2019)
last_date19 <- as.Date(sprintf('%s-12-31',lastyear19))
}
b<-last_day_19(Sys.Date())
b## [1] "2019-12-31"
hari terakhir pada tahun 2020
last_day_20 <- function(x) {
lastyear20 <- as.numeric(format(x, "%Y")) - (year(ymd(Sys.Date()))-2020)
last_date20 <- as.Date(sprintf('%s-12-31',lastyear20))
}
c<-last_day_20(Sys.Date())
c## [1] "2020-12-31"
Production year 2019
Production year merupakan pengakuan produksi premi dengan catatan cut off pada akhir periode tahun tersebut, sehingga pencatatan premi pada production year bersifat pro rata.
report$PRODUCTION_YEAR_2019 <- ifelse(report$INCEPTION_YEAR==2019,
ifelse(report$DISCOUNT<0,((as.numeric((b-mdy(report$INCEPTION))/report$PERIOD_COUNT))*(report$PREMIUM_GROSS+report$DISCOUNT)),
((as.numeric((b-mdy(report$INCEPTION))/report$PERIOD_COUNT))*(report$PREMIUM_GROSS-report$DISCOUNT))),0)
head(report)## NO_MONTH MONTH SEGMENT POLICYNO TRANSACTION_TYPE
## 1 1 January Direct 11002011900022 NEW
## 2 1 January Agent 11502011900001 NEW
## 3 1 January Agent 11502011900001-000001 NEW
## 4 1 January Agent 11502011900001-000002 NEW
## 5 1 January Agent 11502011900001-000003 NEW
## 6 1 January Agent 11502011900001-000004 NEW
## INCEPTION EXPIRY BOOKING_DATE USER_APPROVE_DATE TOC TOC_DESCRIPTION
## 1 12/14/2018 12/14/2019 01/09/2019 01/09/2019 201 PSAKBI
## 2 12/04/2018 12/27/2021 01/02/2019 01/02/2019 201 PSAKBI
## 3 12/04/2018 12/04/2020 01/02/2019 01/02/2019 201 PSAKBI
## 4 12/20/2018 12/20/2021 01/02/2019 01/02/2019 201 PSAKBI
## 5 12/26/2018 12/26/2021 01/02/2019 01/02/2019 201 PSAKBI
## 6 12/27/2018 12/27/2021 01/02/2019 01/02/2019 201 PSAKBI
## TOC_GROUP TOC_GROUP_DESCRIPTION TSI PREMIUM_GROSS DISCOUNT
## 1 2 Motor Vehicle 165750000 5347933 -1336983
## 2 2 Motor Vehicle 0 0 0
## 3 2 Motor Vehicle 37000000 207200 0
## 4 2 Motor Vehicle 65000000 637000 0
## 5 2 Motor Vehicle 78000000 764400 0
## 6 2 Motor Vehicle 104000000 582400 0
## COMMISSION VAT TAX POLICY_FEE STAMP_DUTY VEHICLE_CATEGORY
## 1 0 0 0 44000 6000 Non Bus / Non Truck
## 2 0 0 0 120000 0 #N/A
## 3 -51800 0 1295 0 0 Non Bus / Non Truck
## 4 -159250 0 3981 0 0 Truck / Pick Up
## 5 -191100 0 4778 0 0 Truck / Pick Up
## 6 -145600 0 3640 0 0 Non Bus / Non Truck
## VEHICLE_TYPE GROUP_MV INCEPTION_YEAR EXPIRY_YEAR PERIOD_COUNT
## 1 Sedan MV 4 2018 2019 365
## 2 #N/A MV 4 2018 2021 1119
## 3 Minibus MV 4 2018 2020 731
## 4 Light Truck MV 4 2018 2021 1096
## 5 Pick Up/Box MV 4 2018 2021 1096
## 6 Minibus MV 4 2018 2021 1096
## PRODUCTION_YEAR_2019
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 0
production_year_2019 <- report %>%
filter(INCEPTION_YEAR == 2019) %>%
group_by(INCEPTION) %>%
summarise(PRODUCTION_YEAR_2019 = sum(PRODUCTION_YEAR_2019)) %>%
mutate(date = mdy(INCEPTION)) %>%
select(date,
PRODUCTION_YEAR_2019)cek range tanggal pada production year 2019
## [1] "2019-01-01" "2019-12-31"
Pada tahap ini akan, kita akan membuat grafik produksi premi untuk tahun produksi premi tahun 2019
prod2019_ts <- ts(data = production_year_2019$PRODUCTION_YEAR_2019, start = range(production_year_2019$date)[[1]], frequency = 28.5)
tsp = attributes(prod2019_ts)$tsp
dates = seq(as.Date("2019-01-01"), by = "day", along = prod2019_ts)
plot(prod2019_ts, xaxt = "n", main= "Premium Production (Production year of 2019)",
ylab="Premium Production", xlab="Date")
axis(1, at = seq(tsp[1], tsp[2], along = prod2019_ts), labels = format(dates, "%b-%y"),gap.axis = 6,lwd.ticks = 0)production_year_2019_v2 <- report %>%
filter(INCEPTION_YEAR == 2019) %>%
group_by(BOOKING_DATE) %>%
summarise(PRODUCTION_YEAR_2019 = sum(PRODUCTION_YEAR_2019)) %>%
mutate(date = mdy(BOOKING_DATE)) %>%
select(date,
PRODUCTION_YEAR_2019)cek range tanggal pada production year 2019
## [1] "2019-01-03" "2019-12-31"
## # A tibble: 267 x 2
## date PRODUCTION_YEAR_2019
## <date> <dbl>
## 1 2019-01-03 18581933.
## 2 2019-01-04 -6957367.
## 3 2019-01-05 6360655.
## 4 2019-01-07 34700586.
## 5 2019-01-09 8221864.
## 6 2019-01-10 24807729.
## 7 2019-01-11 60898817.
## 8 2019-01-14 33328724.
## 9 2019-01-15 18688747.
## 10 2019-01-16 7206983.
## # ... with 257 more rows
Dari gambar di atas dapat dianalisa, meskipun perhitungan produksi premi berdasarkan tahun produksinya terlihat bahwa pada sekitar bulan April - Juni mengalami penaikan produksi premi karena periode tersebut dipengaruhi oleh momen lebaran tahun 2019, setelah periode tersebut, produksi premi mengalami penurunan yang cukup signifikan selama tahun 2019 tersebut dan mengalami kenaikan secara perlahan dan stabil hingga mengalami penurunan pada akhir tahun yang dipengaruhi periode cut off pada akhir tahun 2019.
Policy Year 2019
Untuk menentukan pencatatan premi asuransi kendaraan bermotor berdasarkan Policy Year 2019 sangat erat hubungannya dengan periode asuransi dan juga depresiasi / penyustan harga kendaraan bermotor yang beragam berdasarkan partner asuransi dan ketentuan underwriter di perusahaan asuransi tersebut. Sehingga kita tentukan terlebih dahulu persentase pengakuan produksinya, dengan ketentuan sebagai berikut :
- Jika periode asuransi 1 tahun maka pengakuan produksi nya adalah 100%
- Jika periode asuransi 2 tahun maka pengakuan produksi nya adalah 54.09%
- Jika periode asuransi 3 tahun maka pengakuan produksi nya adalah 38.10%
- Jika periode asuransi 4 tahun maka pengakuan produksi nya adalah 30.05%
- Jika periode asuransi 5 tahun maka pengakuan produksi nya adalah 24.05%
- Jika periode asuransi 6 tahun maka pengakuan produksi nya adalah 23.00%
- Jika periode asuransi 7 tahun maka pengakuan produksi nya adalah 21.89
keterangan di atas merupkan hasil riset penulis
Buat kolom baru berupa POLICY_YEAR_2019_RATE
report$POLICY_YEAR_2019_RATE <- ifelse(report$INCEPTION_YEAR == 2019, ifelse(report$PERIOD_COUNT/365.25 <= 1 , 1,
ifelse(report$PERIOD_COUNT/365.25 > 1 & report$PERIOD_COUNT/365.25 <= 731/365.25 , 0.5409,
ifelse(report$PERIOD_COUNT/365.25 > 2 & report$PERIOD_COUNT/365.25 <= 1096/365.25 , 0.381,
ifelse(report$PERIOD_COUNT/365.25 > 3 & report$PERIOD_COUNT/365.25 <= 1461/365.25 , 0.3005,
ifelse(report$PERIOD_COUNT/365.25 > 4 & report$PERIOD_COUNT/365.25 <= 1827/365.25 , 0.2505,
ifelse(report$PERIOD_COUNT/365.25 > 5 & report$PERIOD_COUNT/365.25 <= 2192/365.25, 0.23, 0.2189)))))),0)setelah mengetahui nilai dari persentase pengakuan produksinya, maka hitung policy year pada setiap produksi polis yang tahun pembuatan polis nya adalah tahun 2019
report$POLICY_YEAR_2019 <- ifelse(report$INCEPTION_YEAR == 2019,
ifelse(report$DISCOUNT<0,report$POLICY_YEAR_2019_RATE*(report$PREMIUM_GROSS+report$DISCOUNT),report$POLICY_YEAR_2019_RATE*(report$PREMIUM_GROSS-report$DISCOUNT)),0)policy_year_2019 <- report %>%
filter(INCEPTION_YEAR == 2019) %>%
group_by(INCEPTION) %>%
summarise(POLICY_YEAR_2019 = sum(POLICY_YEAR_2019)) %>%
mutate(date = mdy(INCEPTION)) %>%
select(date,
POLICY_YEAR_2019)cek range tanggal pada policy year 2019
## [1] "2019-01-01" "2019-12-31"
polyear2019_ts <- ts(data = policy_year_2019$POLICY_YEAR_2019, start = range(policy_year_2019$date)[[1]], frequency = 29)
tsp2 = attributes(polyear2019_ts)$tsp
dates = seq(as.Date("2019-01-01"), by = "day", along = polyear2019_ts)
plot(polyear2019_ts, xaxt = "n", main= "Premium Production (Policy year of 2019)",
ylab="Premium Production", xlab="Date")
axis(1, at = seq(tsp2[1], tsp2[2], along = polyear2019_ts), labels = format(dates, "%b-%y"),gap.axis = 6,lwd.ticks = 0)## Classes 'tbl_df', 'tbl' and 'data.frame': 363 obs. of 2 variables:
## $ date : Date, format: "2019-01-01" "2019-01-02" ...
## $ POLICY_YEAR_2019: num 1.57e+08 1.90e+07 3.69e+07 3.57e+06 1.17e+06 ...
Terlihat bahwa tren yang dihasilkan bahwa mengalami kenaikan dua periode hal ini disebabkan pengaruh dari lebaran tahun 2019, dan momen akhir tahun (promo pembelian kendaraan pada akhir tahun).
Underwriting Year 2019
Seperti yang sudah di bahas di atas, underwriting year 2019 merupakan pencatatan produksi premi yang di underwrite oleh tim underwriter asuransi. Sehingga produksi premi tersebut adalah total dari PREMIUM_GROSS dengan DISCOUNT
Buat kolom baru berupa UNDERWRITING_YEAR_2019
report$UNDERWRITING_YEAR_2019 <- ifelse(report$INCEPTION_YEAR==2019,
ifelse(report$DISCOUNT<0,(report$PREMIUM_GROSS+report$DISCOUNT), (report$PREMIUM_GROSS-report$DISCOUNT)),0) underwriting_year_2019 <- report %>%
filter(INCEPTION_YEAR == 2019) %>%
group_by(INCEPTION) %>%
summarise(UNDERWRITING_YEAR_2019 = sum(UNDERWRITING_YEAR_2019)) %>%
mutate(date = mdy(INCEPTION)) %>%
select(date,
UNDERWRITING_YEAR_2019)cek range tanggal pada policy year 2019
## [1] "2019-01-01" "2019-12-31"
uwyear2019_ts <- ts(data = underwriting_year_2019$UNDERWRITING_YEAR_2019, start = range(underwriting_year_2019$date)[[1]], frequency = 29)
tsp3 = attributes(uwyear2019_ts)$tsp
dates = seq(as.Date("2019-01-01"), by = "day", along = uwyear2019_ts)
plot(uwyear2019_ts, xaxt = "n", main= "Premium Production (Underwriting year of 2019)",
ylab="Premium Production", xlab="Date")
axis(1, at = seq(tsp3[1], tsp3[2], along = uwyear2019_ts), labels = format(dates, "%b-%y"),gap.axis = 6,lwd.ticks = 0)Terlihat bahwa tren yang dihasilkan bahwa mengalami kenaikan dua periode hal ini disebabkan pengaruh dari lebaran tahun 2019, dan momen akhir tahun (promo pembelian kendaraan pada akhir tahun).
Multi Season Data
Dari hasil tiga grafik terlihat bahwa pada trend tersebut mengalami dua kenaikan, sehingga data yang di olah merupakan data multi season, untuk mengolah data tersebut diperlukan fungsi msts untuk membuat data time series nya dan mstl untuk decompose
Production Year 2019
production_year_2019$PRODUCTION_YEAR_2019 %>%
msts(seasonal.periods = c(28.5,28.5*3)) %>%
mstl() %>%
autoplot()Segment yang paling berkontribusi
report_total1 <- report %>%
group_by(SEGMENT) %>%
summarise(PREMIUM_GROSS = sum(PREMIUM_GROSS)) %>%
ungroup()
head(report_total1)## # A tibble: 5 x 2
## SEGMENT PREMIUM_GROSS
## <fct> <dbl>
## 1 Agent 4227830087
## 2 Bank 14773252
## 3 Dealer 3477322251
## 4 Direct 14428678471
## 5 Leasing 90637046346
ggplot(report_total1, aes(reorder(Segment, Gross_Premium), Gross_Premium))+
geom_col()+
labs(y = "Premium Gross (in IDR)", x = "Segment", title = "Premium Production Per Segment", caption = "Source : Premium Production" )+
coord_flip()+
theme_minimal()## NO_MONTH MONTH SEGMENT POLICYNO TRANSACTION_TYPE
## 1 1 January Direct 11002011900022 NEW
## 2 1 January Agent 11502011900001 NEW
## 3 1 January Agent 11502011900001-000001 NEW
## 4 1 January Agent 11502011900001-000002 NEW
## 5 1 January Agent 11502011900001-000003 NEW
## 6 1 January Agent 11502011900001-000004 NEW
## INCEPTION EXPIRY BOOKING_DATE USER_APPROVE_DATE TOC TOC_DESCRIPTION
## 1 12/14/2018 12/14/2019 01/09/2019 01/09/2019 201 PSAKBI
## 2 12/04/2018 12/27/2021 01/02/2019 01/02/2019 201 PSAKBI
## 3 12/04/2018 12/04/2020 01/02/2019 01/02/2019 201 PSAKBI
## 4 12/20/2018 12/20/2021 01/02/2019 01/02/2019 201 PSAKBI
## 5 12/26/2018 12/26/2021 01/02/2019 01/02/2019 201 PSAKBI
## 6 12/27/2018 12/27/2021 01/02/2019 01/02/2019 201 PSAKBI
## TOC_GROUP TOC_GROUP_DESCRIPTION TSI PREMIUM_GROSS DISCOUNT
## 1 2 Motor Vehicle 165750000 5347933 -1336983
## 2 2 Motor Vehicle 0 0 0
## 3 2 Motor Vehicle 37000000 207200 0
## 4 2 Motor Vehicle 65000000 637000 0
## 5 2 Motor Vehicle 78000000 764400 0
## 6 2 Motor Vehicle 104000000 582400 0
## COMMISSION VAT TAX POLICY_FEE STAMP_DUTY VEHICLE_CATEGORY
## 1 0 0 0 44000 6000 Non Bus / Non Truck
## 2 0 0 0 120000 0 #N/A
## 3 -51800 0 1295 0 0 Non Bus / Non Truck
## 4 -159250 0 3981 0 0 Truck / Pick Up
## 5 -191100 0 4778 0 0 Truck / Pick Up
## 6 -145600 0 3640 0 0 Non Bus / Non Truck
## VEHICLE_TYPE GROUP_MV INCEPTION_YEAR EXPIRY_YEAR PERIOD_COUNT
## 1 Sedan MV 4 2018 2019 365
## 2 #N/A MV 4 2018 2021 1119
## 3 Minibus MV 4 2018 2020 731
## 4 Light Truck MV 4 2018 2021 1096
## 5 Pick Up/Box MV 4 2018 2021 1096
## 6 Minibus MV 4 2018 2021 1096
## PRODUCTION_YEAR_2019 POLICY_YEAR_2019_RATE POLICY_YEAR_2019
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## 4 0 0 0
## 5 0 0 0
## 6 0 0 0
## UNDERWRITING_YEAR_2019
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 0
Jumlah Polis Terbanyak
report_total2 <- report_total2 %>%
group_by(report_total2$SEGMENT) %>%
summarise(number =n()) %>%
ungroup()ggplot(report_total2, aes(reorder(Segment, Number_of_Policy), Number_of_Policy))+
geom_col()+
labs(y = "Policy Production", x = "Segment", title = "Policy Production Per Segment", caption = "Source : Premium Production" )+
coord_flip()+
theme_minimal()Analisa Sementara
Jika dilihat dari hasil Exploratory Data Analysis secara singkat bahwa produksi premi yang dihasilkan terbesar dari segment Leasing dan juga berbanding lurus dengan polis yang di terbitkan. Jika hal dilihat dari data report awal bahwa produksi dari segment leasing banyak memliki periode polis lebih dari satu tahun, maka dari itu jika ingin melakukan prediksi premi tahunan kita harus breakdown premi tersebut menjadi tahunan.
To Be Continued…