🎯 リサンプリングの重要性
            
                リサンプリングは、限られたデータから信頼性の高いモデル評価を行うための統計的手法です。rsampleパッケージを使用して、様々なリサンプリング戦略を実装します。
            
            
            📦 環境のセットアップ
            
            
                
                
                    
                    library(tidyverse)
                    
                    library(rsample)
                    
                    
                    library(tidymodels)
                    
                    library(yardstick)
                    
                    
                    set.seed(123)
                    
                    
                    regression_data <- tibble(
                      x1 = rnorm(1000),
                      x2 = rnorm(1000),
                      y = 2 * x1 + 1.5 * x2 + rnorm(1000)
                    )
                    
                    glimpse(regression_data)
                
             
        
        
        
            ✂️ 基本的なデータ分割
            
                initial_split()を使用して、データを訓練用とテスト用に分割します。これが全てのモデル評価の出発点です。
            
            
            
                🎯 いつ・なぜ使うか?
                
                    
                        📋 適用シチュエーション
                        
                            - 最終的なモデル性能を公正に評価したい
 
                            - 新しいデータに対する予測精度を知りたい
 
                            - モデルの汎化能力を測定したい
 
                            - 過学習(オーバーフィッティング)を検出したい
 
                        
                     
                    
                        🎯 具体的な目的
                        
                            - Hold-out評価:未見データでの性能測定
 
                            - 層化分割:クラス比率や分布の保持
 
                            - 時系列分割:時間的順序の考慮
 
                            - 最終判定:プロダクション投入前の品質保証
 
                        
                     
                 
                
                    
                        💡 重要な注意点: テストデータは一度だけ使用し、モデル選択や調整には絶対に使わないこと!
                    
                 
             
            
            
                
                
                    
                    data_split <- regression_data %>%
                      initial_split(prop = 0.8)
                    
                    
                    train_data <- training(data_split)
                    test_data <- testing(data_split)
                    
                    print(paste("訓練データ:", nrow(train_data)))
                    print(paste("テストデータ:", nrow(test_data)))
                    
                    
                    stratified_split <- regression_data %>%
                      mutate(y_group = cut(y, breaks = 3)) %>%
                      initial_split(prop = 0.8, strata = y_group)
                    
                    print("層化抽出完了")
                
             
        
        
        
            🔄 クロスバリデーション
            
                クロスバリデーションにより、モデルの汎化性能を信頼性高く評価できます。k-fold、leave-one-out、Monte Carloなど様々な手法があります。
            
            
            
                🔍 いつ・なぜ使うか?
                
                    
                        📋 適用シチュエーション
                        
                            - モデル選択時の性能比較をしたい
 
                            - ハイパーパラメータを調整したい
 
                            - 小さなデータセットを有効活用したい
 
                            - 統計的に安定した評価が必要
 
                        
                     
                    
                        🎯 具体的な目的
                        
                            - K-fold CV:バランスの取れた評価
 
                            - 層化CV:不均衡データでの公正評価
 
                            - Repeated CV:より安定した推定
 
                            - Leave-one-out:極小データでの最大活用
 
                        
                     
                 
                
                    
                        ⚡ 実用のコツ: 5-10 fold CVが一般的。計算コストと精度のバランスを考慮して選択!
                    
                 
             
            
            
                
                
                    
                    cv_folds <- train_data %>%
                      vfold_cv(v = 10)
                    
                    print(cv_folds)
                    
                    
                    stratified_cv <- train_data %>%
                      mutate(y_group = cut(y, breaks = 3)) %>%
                      vfold_cv(v = 5, strata = y_group)
                    
                    print("層化CV作成完了")
                
             
        
        
        
            👢 ブートストラップリサンプリング
            
                ブートストラップは復元抽出によるリサンプリング手法で、信頼区間の推定や分散の評価に有用です。
            
            
            
                🎲 いつ・なぜ使うか?
                
                    
                        📋 適用シチュエーション
                        
                            - 不確実性の定量化をしたい
 
                            - 信頼区間を推定したい
 
                            - 分散やバイアスを評価したい
 
                            - アンサンブル学習に活用したい
 
                        
                     
                    
                        🎯 具体的な目的
                        
                            - Bootstrap CI:予測の信頼区間算出
 
                            - Out-of-bag評価:OOBエラーでの性能測定
 
                            - Bagging:ランダムフォレスト等の基盤
 
                            - 安定性評価:モデルの頑健性チェック
 
                        
                     
                 
                
                    
                        🚀 パワフルな特徴: 元データの約63%を含み、37%はOut-of-bagとして独立評価に使用可能!
                    
                 
             
            
            
                
                
                    
                    bootstrap_samples <- train_data %>%
                      bootstraps(times = 25)
                    
                    print(bootstrap_samples)
                    
                    
                    first_boot <- bootstrap_samples$splits[[1]]
                    boot_data <- analysis(first_boot)
                    
                    print(paste("ブートストラップサンプルサイズ:", nrow(boot_data)))
                
             
        
        
        
            🎲 Monte Carlo クロスバリデーション
            
                Monte Carlo CVは、ランダムな分割を繰り返す手法で、計算効率が良く大規模データセットに適しています。
            
            
            
                🌟 いつ・なぜ使うか?
                
                    
                        📋 適用シチュエーション
                        
                            - 大規模データで計算効率を重視
 
                            - 柔軟な分割比率を設定したい
 
                            - より多くの評価を効率的に実行
 
                            - 統計的変動を詳細に把握したい
 
                        
                     
                    
                        🎯 具体的な目的
                        
                            - 高速評価:計算時間の大幅短縮
 
                            - カスタム比率:任意のtrain/test比率
 
                            - 並列処理:独立分割による効率化
 
                            - 信頼性向上:多数回評価による安定性
 
                        
                     
                 
                
                    
                        💪 効率性の秘密: K-fold CVと異なり重複なし分割で、大データでも高速実行可能!
                    
                 
             
            
            
                
                
                    
                    mc_cv <- train_data %>%
                      mc_cv(prop = 0.8, times = 20)
                    
                    print(mc_cv)
                    
                    
                    repeated_cv <- train_data %>%
                      vfold_cv(v = 5, repeats = 3)
                    
                    print("繰り返しCV作成完了")
                
             
        
        
        
            📊 時系列データ分割
            
                時系列データでは、時間の順序を保持した特別な分割戦略が必要です。rolling_origin()とsliding_window()を使用します。
            
            
            
                ⏰ いつ・なぜ使うか?
                
                    
                        📋 適用シチュエーション
                        
                            - 時系列データの予測モデル構築
 
                            - 時間的依存性があるデータ分析
 
                            - 季節性やトレンドを考慮
 
                            - 未来予測の精度を正しく評価
 
                        
                     
                    
                        🎯 具体的な目的
                        
                            - Rolling Forecast:逐次予測評価
 
                            - Walk-forward:リアルタイム環境模擬
 
                            - Temporal Leakage防止:未来情報の遮断
 
                            - Dynamic Model:時間変化への対応
 
                        
                     
                 
                
                    
                        ⚠️ 重要な原則: 時系列では絶対に未来のデータを過去の予測に使ってはいけない!
                    
                 
             
            
            
                
                
                    
                    ts_data <- tibble(
                      date = seq(as.Date("2020-01-01"), as.Date("2023-12-31"), by = "day"),
                      value = cumsum(rnorm(1461))
                    )
                    
                    
                    rolling_splits <- ts_data %>%
                      rolling_origin(
                        initial = 365,
                        assess = 30,
                        skip = 30
                      )
                    
                    print(rolling_splits)
                
             
        
        
        
            📊 リサンプリングを用いたモデル評価
            
                作成したリサンプリングオブジェクトを使用して、実際にモデルを評価します。
            
            
            
                
                
                    
                    lm_model <- linear_reg() %>%
                      set_engine("lm")
                    
                    
                    basic_recipe <- recipe(y ~ ., data = train_data)
                    
                    
                    lm_workflow <- workflow() %>%
                      add_model(lm_model) %>%
                      add_recipe(basic_recipe)
                    
                    
                    cv_results <- lm_workflow %>%
                      fit_resamples(cv_folds)
                    
                    print(collect_metrics(cv_results))
                
             
        
        
        
            ✅ バリデーションセット
            
                3分割(train/validation/test)によるモデル開発とパラメータ調整の戦略を学びます。
            
            
            
                
                
                    
                    val_split <- train_data %>%
                      initial_validation_split(prop = c(0.6, 0.2))
                    
                    train_set <- training(val_split)
                    validation_set <- validation(val_split)
                    test_set <- testing(val_split)
                    
                    print(paste(
                      "Train:", nrow(train_set),
                      "Validation:", nrow(validation_set),
                      "Test:", nrow(test_set)
                    ))
                
             
        
        
        
            🛠️ カスタム分割戦略
            
                特殊なデータ構造や要件に対応するための、カスタムリサンプリング戦略を作成します。
            
            
            
                
                
                    
                    grouped_data <- regression_data %>%
                      mutate(group = sample(letters[1:5], n(), replace = TRUE))
                    
                    
                    group_cv <- grouped_data %>%
                      group_vfold_cv(group)
                    
                    print(group_cv)
                    
                    
                    small_data <- regression_data %>%
                      slice_head(n = 50)
                    
                    loo_cv <- small_data %>%
                      loo_cv()
                    
                    print("Leave-one-out CV作成完了")
                
             
        
        
        
            🎯 まとめ
            
                本章では、rsampleパッケージを使用した様々なリサンプリング戦略を学習しました。
            
            
                - 基本的な訓練・テスト分割の実装
 
                - k-fold クロスバリデーションの活用
 
                - ブートストラップリサンプリングの理解
 
                - Monte Carlo クロスバリデーション
 
                - 時系列データの特殊分割戦略
 
                - バリデーションセットの設計
 
                - カスタム分割戦略の実装
 
            
            
                これらの技術により、信頼性の高いモデル評価と汎化性能の推定が可能になります。
            
        
    
    
        
            
                📚 学習におすすめの書籍
            
            
            
            
            
                
                    ※ 当サイトはAmazonアソシエイトプログラムに参加しています