R Academy · Ders

Monte Carlo Simülasyonunun Temelleri

Tekrarlı rastgele örnekleme ile pi ve diğer nicelikleri tahmin edin.

3. ders / 413 adım

Monte Carlo Simülasyonunun Temelleri, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

Monte Carlo Nedir?

Monte Carlo benzetimi, analitik olarak hesaplanması zor nicelikleri tahmin etmek için tekrarlı rastgele örnekleme kullanır. Adını Monako'daki kumarhaneden alan bu yöntem; finans, fizik, istatistik ve yapay zekâda tümleştirme, eniyileme ve çıkarım için kullanılır.

# Core idea: approximate deterministic quantities
# using random sampling and the Law of Large Numbers

# Example: estimate probability that sum of two dice > 8
set.seed(42)
n <- 10000
die1 <- sample(1:6, n, replace = TRUE)
die2 <- sample(1:6, n, replace = TRUE)
total <- die1 + die2

# Monte Carlo estimate
mc_estimate <- mean(total > 8)
cat('MC estimate P(sum > 8):', mc_estimate, '\n')

# Exact probability
exact <- sum(outer(1:6, 1:6, '+') > 8) / 36
cat('Exact probability:', exact)

Rastgele Noktalarla Pi'yi Tahmin Etme

Klasik Monte Carlo gösterimi: birim kareye rastgele noktalar yerleştirin. Birim çemberin içine düşen noktaların oranı π/4'ü tahmin eder. n → ∞ iken tahmin π'ye yakınsar.

set.seed(42)
n <- 100000

# Random points in [-1, 1] x [-1, 1] unit square
x <- runif(n, -1, 1)
y <- runif(n, -1, 1)

# Check if inside unit circle: x^2 + y^2 <= 1
inside <- (x^2 + y^2) <= 1

# Pi estimate: fraction inside * area of square
pi_estimate <- 4 * mean(inside)
cat('Pi estimate:', pi_estimate, '\n')
cat('True pi:', pi, '\n')
cat('Error:', abs(pi_estimate - pi))

Beklenen Değeri Tahmin Etme

Monte Carlo tümleştirmesi: X₁,...,Xₙ bağımsız ve özdeş dağılımlı çekilişler olmak üzere E[f(X)] ≈ (1/n) Σ f(Xᵢ). g(x)'i a ile b arasında tümleştirmek için Uniform(a,b) dağılımından x örnekleyin; E[g(X)] ≈ (b-a) * mean(g(samples)) olur.

set.seed(42)
# Estimate integral of sin(x) from 0 to pi
# Exact value = 2
n <- 50000
x_samples <- runif(n, min = 0, max = pi)
integrand_vals <- sin(x_samples)

# MC estimate = (b-a) * mean(f(x))
mc_integral <- pi * mean(integrand_vals)  # (pi - 0) * mean
cat('MC estimate of integral:', mc_integral, '\n')
cat('Exact value: 2\n')
cat('Error:', abs(mc_integral - 2), '\n')

# Standard error of the estimate
se <- pi * sd(integrand_vals) / sqrt(n)
cat('Standard error:', se)

Tekrarlı Benzetimler için replicate()

replicate(n, expr), bir benzetimi n kez çalıştırıp sonuçları toplayan, R'nin yerleşik işlevidir. Basit benzetimlerde for döngüsünden daha temizdir ve bir vektör veya matris döndürür.

set.seed(42)
# Simulate sample mean of 30 N(0,1) draws
# Repeat 10000 times to study sampling distribution
sample_means <- replicate(10000, {
  x <- rnorm(30)  # sample of 30
  mean(x)          # compute mean
})

# Central Limit Theorem: sample mean ~ N(0, 1/sqrt(30))
mean(sample_means)  # ~0
sd(sample_means)    # ~1/sqrt(30) = 0.183

# 95% CI width
diff(quantile(sample_means, c(0.025, 0.975)))

# Compare to theoretical
2 * 1.96 / sqrt(30)

Büyük Sayılar Yasası Gösterimi

Büyük Sayılar Yasası, n arttıkça örnek ortalamasının gerçek ortalamaya yakınsadığını söyler. Bu yakınsamayı R'de izlemek, Monte Carlo yönteminin neden işe yaradığını ve tahminlerin ne kadar hızlı kararlı hâle geldiğini gösterir.

set.seed(42)
# Rolling a fair die: true mean = 3.5
n_max <- 10000
rolls <- sample(1:6, n_max, replace = TRUE)
cumulative_means <- cumsum(rolls) / seq_along(rolls)

# Show convergence at different sample sizes
ns <- c(10, 100, 1000, 5000, 10000)
results <- data.frame(
  n = ns,
  mean = cumulative_means[ns],
  error = abs(cumulative_means[ns] - 3.5)
)
print(results)
# Error decreases as n increases

Varyans Azaltma: Antitetik Değişkenler

Düzgün dağılımdan alınan u örneklerini ve tümleyenlerini (1-u) bir antitetik çift olarak kullanın. Negatif korelasyonları, aynı sayıda işlev değerlendirmesiyle tahmin edicinin varyansını %50'ye kadar azaltır.

set.seed(42)
n <- 1000

# Standard MC: estimate E[exp(U)] where U~Uniform(0,1)
# True value = e - 1 = 1.718282
u <- runif(n)
mc_std <- mean(exp(u))

# Antithetic variates: use u AND 1-u
u_anti <- runif(n/2)
mc_anti <- mean((exp(u_anti) + exp(1 - u_anti)) / 2)

cat('True value:', exp(1) - 1, '\n')
cat('Standard MC:', mc_std, '\n')
cat('Antithetic MC:', mc_anti, '\n')

# Variance comparison
var_std  <- var(exp(runif(10000)))
var_anti <- var((exp(runif(5000)) + exp(1 - runif(5000)))/2)
cat('Variance ratio (anti/std):', var_anti/var_std)

Kontrol Değişkenleri

Bir kontrol değişkeni, beklenen değeri bilinen ve hedefle korelasyonlu bir işlevdir. Varyansı azaltmak için bu işlevi uygun bir katsayıyla çarpıp çıkarın. Klasik yaklaşım: ortalaması bilinen korelasyonlu g(X)'i kullanarak E[f(X)]'i tahmin etmek.

set.seed(42)
n <- 5000

# Estimate E[exp(U)] where U~Uniform(0,1)
# True: e - 1 = 1.71828

# Control variate: g(U) = U, E[U] = 0.5
u <- runif(n)
f_vals <- exp(u)  # target
g_vals <- u       # control variate

# Optimal coefficient c = -Cov(f,g)/Var(g)
c_star <- -cov(f_vals, g_vals) / var(g_vals)

# Control variate estimator
mc_cv <- mean(f_vals + c_star * (g_vals - 0.5))

cat('Standard MC:', mean(f_vals), '\n')
cat('Control variate MC:', mc_cv, '\n')
cat('True value:', exp(1) - 1)

# Variance reduction factor
var(f_vals) / var(f_vals + c_star * (g_vals - 0.5))

Olasılık Tahmini için Monte Carlo

Monte Carlo, analitik olarak ele alınması mümkün olmayan karmaşık olasılıkları tahmin etmede çok başarılıdır. Rastgele süreci çok kez benzetin ve olayın gerçekleştiği durumların oranını hesaplayın.

set.seed(123)
# Birthday problem: P(at least 2 people share birthday)
# in a group of n people

birtday_collision <- function(n_people) {
  birthdays <- sample(1:365, n_people, replace = TRUE)
  length(birthdays) != length(unique(birthdays))
}

# Estimate for groups of size 10, 23, 50
sizes <- c(10, 23, 50)
for (sz in sizes) {
  p <- mean(replicate(5000, birt_day_collision <- {
    bd <- sample(1:365, sz, replace = TRUE)
    length(bd) != length(unique(bd))
  }))
  cat('n =', sz, ': P(collision) ~', round(p, 3), '\n')
}

Geometrik Brown Hareketini Benzetme

Hisse senedi fiyatları genellikle Geometrik Brown Hareketi olarak modellenir: S(t+dt) = S(t) * exp((μ - σ²/2)dt + σ√dt * Z), burada Z~N(0,1). Monte Carlo, opsiyon fiyatlaması için fiyat yolları üretir.

set.seed(42)
S0 <- 100     # initial price
mu <- 0.05    # annual drift
sigma <- 0.2  # annual volatility
T <- 1        # 1 year
n_steps <- 252 # daily steps
dt <- T / n_steps

# Simulate one price path
Z <- rnorm(n_steps)
log_returns <- (mu - 0.5 * sigma^2) * dt + sigma * sqrt(dt) * Z
price_path <- S0 * exp(cumsum(log_returns))

cat('Final price:', round(price_path[n_steps], 2), '\n')
cat('Min price:', round(min(price_path), 2), '\n')
cat('Max price:', round(max(price_path), 2))

MC Opsiyon Fiyatlaması

Bir Avrupa alım opsiyonunu Monte Carlo kullanarak fiyatlayın: çok sayıda nihai hisse senedi fiyatı benzetin, max(S_T - K, 0) getirilerini hesaplayın ve ardından ortalama getiriyi e^(-rT) ile iskonto edin.

set.seed(42)
S0 <- 100; K <- 105; r <- 0.05; sigma <- 0.2; T <- 1
n_sim <- 50000

# Final stock prices under risk-neutral measure
Z <- rnorm(n_sim)
ST <- S0 * exp((r - 0.5 * sigma^2) * T + sigma * sqrt(T) * Z)

# Call option payoff
payoff <- pmax(ST - K, 0)

# Discounted expected payoff
call_price <- exp(-r * T) * mean(payoff)
se <- exp(-r * T) * sd(payoff) / sqrt(n_sim)
cat('Call price:', round(call_price, 4), '\n')
cat('95% CI: [', round(call_price - 1.96*se, 4),
    ',', round(call_price + 1.96*se, 4), ']')

MC'nin Yakınsama Hızı

Monte Carlo, O(1/√n) hızında yakınsar: hatayı yarıya indirmek için 4 kat daha fazla örnek gerekir. MC tahmininin standart hatası, integrandın standart sapması σ olmak üzere σ/√n'dir.

set.seed(42)
# Demonstrate MC convergence for pi estimation
estimate_pi <- function(n) {
  x <- runif(n, -1, 1)
  y <- runif(n, -1, 1)
  4 * mean(x^2 + y^2 <= 1)
}

# Sample sizes: powers of 10
ns <- 10^(1:5)
estimates <- sapply(ns, function(n) {
  set.seed(42)
  estimate_pi(n)
})

data.frame(
  n = ns,
  pi_estimate = round(estimates, 5),
  error = round(abs(estimates - pi), 5)
)

Hızlı Kontrol

Monte Carlo benzetiminin temelleri konusundaki anlayışınızı test edin.

Özet: Monte Carlo'nun Temelleri

Temel çıkarımlar: Monte Carlo, nicelikleri çok sayıda rastgele örneğin ortalamasını alarak tahmin eder. Tekrarlı benzetimler için replicate() kullanın. Büyük Sayılar Yasası yakınsamayı garanti eder. Hata 1/√n ile ölçeklenir; hatayı yarıya indirmek için örnek sayısını dört katına çıkarın. Varyans azaltma teknikleri (antitetik değişkenler, kontrol değişkenleri), daha fazla örnek kullanmadan verimliliği artırır. Uygulamalar: tümleştirme, olasılık tahmini, opsiyon fiyatlaması ve benzetim.

set.seed(42)
# Monte Carlo template:
# 1. Define simulation function
simulate_once <- function() {
  x <- runif(1, -1, 1)
  y <- runif(1, -1, 1)
  (x^2 + y^2) <= 1
}

# 2. Replicate many times
n <- 10000
results <- replicate(n, simulate_once())

# 3. Estimate quantity of interest
pi_mc <- 4 * mean(results)

# 4. Quantify uncertainty
se <- 4 * sd(results) / sqrt(n)
cat('Pi:', pi_mc, '+/-', round(1.96*se, 4))
Başlamak ücretsiz

Yapay zeka eğitmeniyle R öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
43
Dersler
159

Sıkça Sorulan Sorular

“Monte Carlo Simülasyonunun Temelleri” dersi ücretsiz mi?

Evet — “Monte Carlo Simülasyonunun Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“Monte Carlo Simülasyonunun Temelleri” dersinde ne öğreneceğim?

Tekrarlı rastgele örnekleme ile pi ve diğer nicelikleri tahmin edin. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Monte Carlo Simülasyonunun Temelleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. set.seed() ve Yeniden Üretilebilirlik
  2. Rastgele Dağılımlar Üretme
  3. Monte Carlo Simülasyonunun Temelleri
  4. R'de Bootstrap Yeniden Örnekleme
← R Academy Sayfasına Dön