🏭 フィーチャード・プロジェクト: Smart Manufacturing Analytics
                
                    IoTセンサーデータ、設備ログ、品質管理データを統合した次世代製造業向け分析システムの構築を通じて、Tidyverseエコシステムの実践的活用を学習します。
                
                
                
                🏗️ システム・アーキテクチャ
                
                
                    
                    
                        
                        library(tidyverse)       
                        library(tidymodels)      
                        library(torch)           
                        library(modeltime)       
                        library(plotly)          
                        library(shiny)           
                        library(DT)              
                        library(shinydashboard) 
                        library(config)          
                        library(pins)            
                        
                        
                        config <- config::get()
                        board <- board_local()
                        
                        
                        data_sources <- list(
                          iot_sensors = "data/iot_sensor_data.csv",
                          production_logs = "data/production_logs.csv",
                          quality_data = "data/quality_measurements.csv",
                          maintenance_records = "data/maintenance_history.csv"
                        )
                        
                        
                        model_config <- list(
                          prediction_horizon = 24,  
                          update_frequency = "hourly",
                          model_types = c("arima", "prophet", "xgboost", "neural_network")
                        )
                    
                 
                
                
                🔄 データ統合パイプライン
                
                
                    
                    
                        
                        create_integrated_dataset <- function() {
                          
                          
                          iot_data <- read_csv(data_sources$iot_sensors) %>%
                            mutate(
                              timestamp = ymd_hms(timestamp),
                              
                              temperature = ifelse(temperature > 1000 | temperature < -50, NA, temperature),
                              pressure = ifelse(pressure < 0, NA, pressure),
                              vibration = ifelse(vibration > 100, NA, vibration)
                            ) %>%
                            
                            mutate(
                              hour = hour(timestamp),
                              day_of_week = wday(timestamp, label = TRUE),
                              shift = case_when(
                                hour %in% 6:14 ~ "morning",
                                hour %in% 14:22 ~ "afternoon",
                                TRUE ~ "night"
                              )
                            )
                          
                          
                          production_data <- read_csv(data_sources$production_logs) %>%
                            mutate(
                              timestamp = ymd_hms(timestamp),
                              efficiency = production_count / target_count,
                              
                              rolling_avg_efficiency = slide_dbl(efficiency, mean, .before = 23, .complete = FALSE),
                              efficiency_trend = efficiency - lag(rolling_avg_efficiency, 24)
                            )
                          
                          
                          quality_data <- read_csv(data_sources$quality_data) %>%
                            mutate(
                              timestamp = ymd_hms(timestamp),
                              quality_score = (100 - defect_rate) * quality_index,
                              quality_category = case_when(
                                quality_score >= 95 ~ "excellent",
                                quality_score >= 85 ~ "good",
                                quality_score >= 70 ~ "acceptable",
                                TRUE ~ "poor"
                              )
                            )
                          
                          
                          integrated_data <- iot_data %>%
                            left_join(production_data, by = "timestamp") %>%
                            left_join(quality_data, by = "timestamp") %>%
                            
                            arrange(timestamp) %>%
                            fill(everything(), .direction = "down") %>%
                            filter(complete.cases(.))
                          
                          return(integrated_data)
                        }
                    
                 
                
                
                🤖 予測モデリング・パイプライン
                
                
                    
                    
                        
                        build_predictive_models <- function(data) {
                          
                          
                          splits <- data %>%
                            time_series_split(
                              date_var = timestamp,
                              assess = "2 weeks",
                              cumulative = TRUE
                            )
                          
                          
                          recipe_spec <- recipe(equipment_failure ~ ., data = training(splits)) %>%
                            step_rm(timestamp) %>%
                            
                            step_lag(temperature, pressure, vibration, lag = 1:6) %>%
                            step_slidify(temperature, pressure, vibration, period = 24, .f = mean, prefix = "mean_24h_") %>%
                            step_slidify(temperature, pressure, vibration, period = 24, .f = sd, prefix = "sd_24h_") %>%
                            
                            step_dummy(all_nominal_predictors()) %>%
                            
                            step_normalize(all_numeric_predictors()) %>%
                            
                            step_impute_knn(all_predictors(), neighbors = 5)
                          
                          
                          rf_spec <- rand_forest(
                            trees = tune(),
                            mtry = tune(),
                            min_n = tune()
                          ) %>%
                            set_engine("ranger", importance = "impurity") %>%
                            set_mode("classification")
                          
                          xgb_spec <- boost_tree(
                            trees = tune(),
                            tree_depth = tune(),
                            learn_rate = tune()
                          ) %>%
                            set_engine("xgboost") %>%
                            set_mode("classification")
                          
                          
                          workflow_set <- workflow_set(
                            preproc = list(recipe = recipe_spec),
                            models = list(
                              random_forest = rf_spec,
                              xgboost = xgb_spec
                            )
                          )
                          
                          
                          cv_folds <- time_series_cv(training(splits), assess = "1 week", cumulative = FALSE)
                          
                          tuned_models <- workflow_set %>%
                            workflow_map(
                              "tune_grid",
                              resamples = cv_folds,
                              grid = 25,
                              metrics = metric_set(accuracy, roc_auc, precision, recall),
                              verbose = TRUE
                            )
                          
                          return(list(
                            splits = splits,
                            tuned_models = tuned_models,
                            cv_folds = cv_folds
                          ))
                        }
                    
                 
                
                
                
                    
                    # A tibble: 6 × 9
  wflow_id          .config               .metric  mean     n   std_err
  <chr>             <chr>                 <chr>   <dbl> <int>     <dbl>
1 recipe_xgboost    Preprocessor1_Model14 roc_auc 0.934     5   0.00821
2 recipe_xgboost    Preprocessor1_Model08 roc_auc 0.932     5   0.00754  
3 recipe_random_for Preprocessor1_Model19 roc_auc 0.928     5   0.00892
4 recipe_xgboost    Preprocessor1_Model23 roc_auc 0.925     5   0.00765
5 recipe_random_for Preprocessor1_Model12 roc_auc 0.923     5   0.00834
6 recipe_xgboost    Preprocessor1_Model17 roc_auc 0.921     5   0.00712
🎯 設備故障予測精度: 93.4% (XGBoost最適モデル)
📊 False Positive Rate: 2.1% (運用コスト最小化)
⏰ 予測リードタイム: 24時間前 (事前対応可能)
💰 推定コスト削減: $2.3M/年 (ダウンタイム回避)