Lab Analitik Bisnis CME Group Foundation
by Andrew Durrer
Source: https://www.rpubs.com/adurrer/bsadlab_08
Dalam percobaan ini, kita akan fokus pada analisis sensitivitas dan simulasi Monte Carlo
Analisi sensitivitas adalah studi tentang bagaimana ketidakpastian dalam keluaran model matematika atau sistem (numerik dan lainnya) dapat dibagi ke berbagai sumber ketidakpastian dalam masukannya. Kita akan menggunakan packages dalam R yang bernama lpSolveAPI.
Simulasi Monte Carlo menggunakan pengambilan sampel acak berulang dari keseluruhan atau populasi tertentu untuk mendapatkan hasil tertentu. Jenis simulasi ini dikenal sebagai simulasi probabilistik, bukan simulasi deterministik.
Contoh dari Simulasi Monte Carlo adalah yang diterapkan untuk memperkirakan nilai pi. Simulasi ini didasarkan pada menghasilkan titik acak dalam satuan persegi dan melihat berapa banyak titik yang berada dalam lingkaran yang dikelilingi oleh satuan persegi (ditandai dengan warna merah). Semakin tinggi jumlah titik sampel, semakin dekat hasilnya dengan hasil sebenarnya. Setelah memilih 30.000 titik acak, perkiraan untuk pi menjadi lebih dekat dengan nilai sebenarnya dalam ketelitian empat titik desimal.
Dalam percobaan ini, kita akan mempelajari cara menghasilkan sampel acak dengan berbagai simulasi dan cara menjalankan analisis sensitivitas pada kasus penggunaan pemasaran yang dibahas.
Ingatlah untuk selalu mengatur direktori kerja kalian ke lokasi sumber file. Pergi ke “Session”, scroll ke bawah, lalu pilih “Set Working Directory”, dan klik “To Source File Location”. Baca dengan hati-hati dibawah ini dan ikuti instruksi untuk menyelesaikan tugas dan menjawab pertanyaan apapun. Kirimkan hasil pekerjaan Anda ke RPubs.
Untuk melakukan analisis sensitivitas, kita perlu menginstall packages lpSolveAPI, kita tidak perlu menginstall packages jika kita sudah menginstall nya dalam R kita masing-masing.
Kita akan meninjau kembali dan menyelesaikan lagi kasus pemasaran yang dibahas (juga dalam percobaan sebelumnya).
# We start with `0` constraint and `2` decision variables. The object name `lpmark` is discretionary.
lpmark2 = make.lp(0, 2)
# Define type of optimization as maximum and dump the screen output into a `dummy` variable
dummy = lp.control(lpmark2, sense="max")
# Set the objective function coefficients
set.objfn(lpmark2, c(275.691, 48.341))
#Add all constraints to the model
add.constraint(lpmark2, c(1, 1), "<=", 350001)
add.constraint(lpmark2, c(1, 0), ">=", 15000)
add.constraint(lpmark2, c(0, 1), ">=", 75000)
add.constraint(lpmark2, c(2, -1), "=", 1)
add.constraint(lpmark2, c(1, 0), ">=", 0)
add.constraint(lpmark2, c(0, 1), ">=", 0)
#Show the problem setting in tabular/matrix form. It's useful to see if our contraints have been properly set.
lpmark2## Model name:
## C1 C2
## Maximize 275.691 48.341
## R1 1 1 <= 350001
## R2 1 0 >= 15000
## R3 0 1 >= 75000
## R4 2 -1 = 1
## R5 1 0 >= 0
## R6 0 1 >= 0
## Kind Std Std
## Type Real Real
## Upper Inf Inf
## Lower 0 0
## [1] 0
#The next two lines of codes will show the optimum results.
#Frist: Display the objective function optimum value i.e. the optimum sales value.
get.objective(lpmark2)## [1] 43443717
#Second: Display the decision variables optimum values i.e. the optimum values for radio and tv ads.
get.variables(lpmark2) ## [1] 116667.3 233333.7
Untuk bagian sensitivitas, kita akan menambahkan dua bagian coding baru untuk mendapatkan hasil sensitivitas.
## $objfrom
## [1] -96.6820 -137.8455
##
## $objtill
## [1] 1e+30 1e+30
Hasil yang didapat terdiri dari dua bagian yaitu: keluaran berlabel objfrom menunjukkan batas bawah dari koefisien sedangkan keluaran berlabel objtill menunjukkan batas atas. Jelaskan secara bersamaan apa yang diwakili oleh hasil sensitivitas dengan mengacu pada model pemasaran.
objfrom menunjukkan berapa angka terendah dari setiap variabel, agar dari persamaan dapat dipenuhi tanpa perlu dioptimalkan dan objtill adalah angka yang sangat besar.
#Display sensitivity to the CONSTRAINTS (or the right hand side values).
#There will be a total of m+n values where m is the number of contraints and n is the number of decision variables
get.sensitivity.rhs(lpmark2) ## $duals
## [1] 124.12433 0.00000 0.00000 75.78333 0.00000 0.00000 0.00000
## [8] 0.00000
##
## $dualsfrom
## [1] 1.125005e+05 -1.000000e+30 -1.000000e+30 -3.050010e+05 -1.000000e+30
## [6] -1.000000e+30 -1.000000e+30 -1.000000e+30
##
## $dualstill
## [1] 1.00000e+30 1.00000e+30 1.00000e+30 4.75002e+05 1.00000e+30 1.00000e+30
## [7] 1.00000e+30 1.00000e+30
Untuk latihan ini kita hanya tertarik pada bagian pertama dari keluaran yang diberi duals label. Jelaskan secara bersamaan apa yang diwakili oleh dua hasil sensitivitas bukan nol. Dalam jawaban Anda, bedakan antara batasan yang mengikat dan tidak mengikat, dan sertakan penjelasan tentang kelebihan atau kekurangan, dan nilai-nilai marjinal.
Hasil bukan nol mewakili kendala yang tidak mengikat, yang berarti bahwa saat varibale meningkat, solusi optimal tidak terpengaruh. Dengan kata lain memiliki kelonggaran untuk “bergerak”, sementara batasan pengikatan terbatas dan akan mempengaruhi solusi optimal jika ditingkatkan. Ini juga berarti bahwa ada nilai marjinal jika terikat dan oleh karena itu dipengaruhi oleh perubahan tersebut.
Untuk memperoleh pemahaman yang lebih baik tentang hasil sensitivitas, dan untuk memastikan integritas kalkulasi, uji independen dapat dilakukan.
Jalankan pemecah program linier lagi mulai dari awal, dengan mendefinisikan objek model baru lpmark1. Semuanya sama, ubah batasan anggaran hanya dengan \(\$1\) dan selesaikan. Secara spesifik, semua sama, ubah batasan pertama \(X1 + X2 \leq 350000\) hanya dengan \(\$1\) sehingga batasan baru akan menjadi \(X1 + X2 \leq 350001\). Catat nilai optimal untuk penjualan seperti yang diberikan oleh fungsi tujuan. 43443641
Hitung perubahan diferensial dalam penjualan. Bagikan pengamatan Anda.
Menjalankan pemecah program linier lagi mulai dari awal, dengan mendefinisikan objek model baru lpmark2. Semua dianggap sama, ubah batasan keempat \(2X_1 - X_2 = 0\) dengan hanya \(\$1\) dan selesaikan. Batasan baru akan menjadi \(2X_1 - X_2 = 1\). Catat nilai optimal untuk penjualan seperti yang diberikan oleh fungsi tujuan.
Hitung perubahan diferensial dalam penjualan. Bagikan pengamatan Anda.
lpmark1 dan proses ini.Untuk tugas ini kita akan menjalankan simulasi Monte Carlo untuk menghitung probabilitas bahwa pengembalian harian dari S&P akan > 5%. Kami akan mengasumsikan bahwa laba harian S&P historis mengikuti distribusi normal dengan pengembalian harian rata-rata 0,03 (%) dan deviasi standar 0,97 (%).
Untuk memulai, kami akan menghasilkan 100 sampel acak dari distribusi normal. Untuk sampel yang dibangkitkan kita akan menghitung mean, standar deviasi, dan probabilitas kejadian dimana hasil simulasi lebih besar dari 5%.
Untuk menghasilkan sampel acak dari distribusi normal kita akan menggunakan fungsi rnorm ()di R. Dalam contoh di bawah ini kita menetapkan jumlah proses (atau sampel) menjadi 100.
# number of simulations/samples
runs2 = 10000
# random number generator per defined normal distribution with given mean and standard deviation
sims2 = rnorm(runs2,mean=0.03,sd=0.97)## [1] 0.03561612
## [1] 0.974095
# probability of occurrence on any given day based on samples will be equal to count (or sum) where sample result is greater than 5% divided by total number of samples.
prob2 = sum(sims2 >=0.05)/runs2
prob2## [1] 0.4939
Ulangi kalkulasi di atas untuk kasus dimana jumlah simulasi / sampel sama dengan 1000. Catat mean, standar deviasi, dan probabilitas. Beri nama semua variabel yang diperlukan sebagai run1, sims1, average1, std1, dan prob1.
Ulangi kalkulasi di atas untuk kasus di mana jumlah simulasi atau sampel sama dengan 10000. Catat mean, stnadar deviasi, dan probabilitas. Beri nama semua variabel yang diperlukan sebagai run2, sims2, average2, std2, dan prob2.
Buat daftar dalam bentuk tabel nilai mean, standar deviasi, dan probabilitas untuk ketiga kasus: simulasi 100, 1000, dan 10000.
mean -.0205 .02989 .02195 sd .995 .9843 .9624 prob .457 .491 .4855
Jelaskan bagaimana nilai berubah / berperilaku seiring bertambahnya jumlah simulasi. Apa taruhan terbaik Anda untuk kemungkinan terjadinya lebih besar dari 5% dan mengapa? Bagaimana ini mirip dengan kasus penggunaan gambar untuk menghitung pi yang disajikan di paragraf pengantar?
Secara umum, semakin banyak simulasi, semakin akurat prediksinya sehingga standar deviasi menjadi lebih ketat dan probabilitas meningkat seiring waktu. Sekitar separuh waktu pengembalian lebih besar dari 5%. Ini serupa dalam arti bahwa semakin banyak varibales yang ditambahkan, semakin akurat predisinya dan semakin representatif angkanya di dunia nyata.