"""
# Cash Ratio Optimization 


Pendahuluan

    Cash ratio (CR) merupakan salah satu aspek likuiditas yang menyatakan tingkat kesehatan bank. CR menunjukkan kemampuan bank dalam memenuhi kewajiban jangka pendek menggunakan alat-alat pembayaran liquid yang dimiliki. Alat-alat liquid ini meliputi kas dan setara kas. CR adalah perbandingan antara kas total perusahaan dengan kewajiban lancarnya. Perhitungan CR dinyatakan oleh persamaan berikut:  
    
    cash_ratio = (kas + setara kas) : hutang lancar. 

Kas pada bisnis perbankan terdiri atas dua komponen, yaitu kas kantor dan kas e-channel, seperti dideskripsikan pada Bagian Overview. Nilai kas kantor pada saat t atau kas_kantor(t) dan nilai kas e channel (t) dinyatakan oleh persamaan berikut: 

    kas_kantor(t)=kas_kantor(t−1) + cash_in_kantor(t)+ cash_out_kantor(t)

    kas_echannel(t) = kas_echannel(t−1) + cash_in_echannel(t) + cash_out_echannel(t)


Definisi Permasalahan

   Pekerjaan yang diberikan pada kompetisi ini, sebagaimana dinyatakan pada Bagian Overview --> Description, adalah melakukan prediksi nilai kas_kantor dan kas_echannel untuk 31 hari kedepan (1 Oktober 2020 - 31 Oktober 2020). Istilah yang lebih tepat digunakan adalah forecasting, karena data yang digunakan adalah data time series. 



"""
"""
Exploratory Data Analysis (EDA)
   
   Pada tahap ini dilakukan proses EDA untuk memahami data. 
"""
# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# Input data files are available in the read-only "../input/" directory
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using "Save & Run All" 
# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session
# mengetahui deskripsi data
dt_desc = pd.read_csv('../input/bri-data-hackathon-cr-optimization/data_description.csv')
pd.set_option('display.max_colwidth',1)
dt_desc
"""
Deskripsi dari setiap kolom ditampilkan pada tampilan diatas, dimana kolom utama yang digunakan untuk melakukan forecasting adalah kolom kas_kantor dan kas_echannel. 

Beberapa hal yang perlu dilakukan adalah:
1. melihat deskripsi data yang diberikan
2. melihat ada atau tidaknya nilai null 
3. melakukan pengecekan kesesuaian antara rumus kas_kantor dan kas_echannel dengan data yang diberikan
"""
#melihat deskripsi data
dt_train = pd.read_csv('../input/bri-data-hackathon-cr-optimization/train.csv')
dt_train.head(10)
dt_train.info()
"""
dari tampilan diatas diketahui sebagai berikut:
1. nilai total kas keluar baik cash_out_echannel maupun cash_out_kantor adalah negatif
2. data training sudah tidak mengandung nilai null. 
"""
"""
langkah selanjutnya adalah mengecek kesesuaian antara rumus kas kantor dengan data
"""
data_train = dt_train
data_train['kas_kantor_t']= data_train['kas_kantor']
data_train['kas_echannel_t']= data_train['kas_echannel']
for idx  in range(len(data_train)):
    if(idx >0):
        data_train['kas_kantor_t'].iloc[idx] = data_train['cash_in_kantor'].iloc[idx]+data_train['cash_out_kantor'].iloc[idx] + data_train['kas_kantor'].iloc[idx-1]
        data_train['kas_echannel_t'].iloc[idx] = data_train['cash_in_echannel'].iloc[idx]+data_train['cash_out_echannel'].iloc[idx] + data_train['kas_echannel'].iloc[idx-1]

#komparasi hasil hitungan dan data yang diberikan
kolom_terpilih = ['kas_kantor','kas_kantor_t','kas_echannel','kas_echannel_t']
dt_komparasi = data_train[kolom_terpilih]
dt_komparasi
"""
Hasil eksplorasi terhadap data menunjukkan bahwa dataset sudah valid untuk bisa digunakan pada proses selanjutnya
"""