cursus.steps.scripts.missing_value_imputation¶
Missing Value Imputation Processing Script
This script handles missing value imputation for tabular data using simple statistical methods. It supports both training mode (fit and transform) and inference mode (transform only). Follows the same pattern as risk_table_mapping.py for consistency.
- find_input_shards(input_dir, log_func)[source]¶
Find all input shards in directory.
Searches for various shard formats (CSV, JSON, Parquet with/without compression).
- Parameters:
- Returns:
Sorted list of shard paths
- Raises:
RuntimeError – If no shards found in input directory
- Return type:
- find_split_shards(input_dir, split_name, log_func)[source]¶
Find all input shards in a specific split subdirectory.
Used when input data is organized as: input_dir/
train/part-00000.csv, part-00001.csv, … val/part-00000.csv, part-00001.csv, … test/part-00000.csv, part-00001.csv, …
- Parameters:
- Returns:
Sorted list of shard paths from the split subdirectory
- Raises:
RuntimeError – If split subdirectory or shards not found
- Return type:
- extract_shard_number(shard_path)[source]¶
Extract shard number from filename like part-00042.csv.
Handles various formats: - part-00042.csv → 42 - part-00042.csv.gz → 42 - part-00042.parquet → 42 - part-00042.snappy.parquet → 42
- Parameters:
shard_path (Path) – Path to shard file
- Returns:
Integer shard number
- Raises:
ValueError – If shard number cannot be extracted
- Return type:
Example
>>> extract_shard_number(Path("part-00042.csv")) 42 >>> extract_shard_number(Path("part-00001.csv.gz")) 1
- write_shard_file(df, output_path, output_format)[source]¶
Write a DataFrame to a shard file in the specified format.
Creates parent directories if needed.
- Parameters:
- Raises:
ValueError – If output_format is not supported
- aggregate_shard_results(results, job_type)[source]¶
Aggregate statistics from parallel shard processing.
- detect_shard_format(shard_path)[source]¶
Auto-detect output format from input shard filename.
Mirrors batch mode’s format preservation behavior.
- Parameters:
shard_path (Path) – Path to a shard file
- Returns:
‘csv’, ‘tsv’, or ‘parquet’
- Return type:
Format string
Example
>>> detect_shard_format(Path("part-00001.csv")) 'csv' >>> detect_shard_format(Path("part-00001.parquet")) 'parquet'
- collect_imputation_statistics_pass1(all_shards, signature_columns, label_field, imputation_config, log_func)[source]¶
Pass 1: Collect imputation statistics from training shards.
Memory-efficient incremental aggregation: - Numeric columns: Accumulate sum + count → compute mean - Categorical/Text columns: Collect all non-null values → compute mode
- Parameters:
- Returns:
Dictionary mapping column names to imputation values Format: {column_name: imputation_value} (XGBoost compatible)
- Return type:
- process_shard_end_to_end_imputation(args)[source]¶
Process single shard: read → apply imputation → write.
Stateless per-shard processing using global impute_dict from Pass 1. Preserves 1:1 shard mapping (input shard number → output shard number).
- Parameters:
args (tuple) – Tuple of (shard_path, shard_num, global_context, output_base, signature_columns, output_format)
contain (global_context must)
"impute_dict" (-) – Dictionary of imputation values
"split_name" (-) – Which split this shard belongs to (“train”, “val”, “test”, etc.)
- Returns:
Statistics dict with row count for this split Format: {“train”: 1000} or {“val”: 200} or {“validation”: 500}
- Return type:
Example
Input: train/part-00042.csv Output: train/part-00042.csv (imputed)
- process_streaming_mode_imputation(input_dir, output_dir, signature_columns, job_type, label_field, imputation_config, max_workers, model_artifacts_input_dir=None, model_artifacts_output_dir=None, logger=None)[source]¶
Streaming mode for missing value imputation with train/val/test subdirectories.
Two-pass architecture: - Pass 1: Collect imputation statistics from training shards only - Pass 2: Apply imputations per split in parallel
Auto-detects output format from input shards (mirrors batch mode behavior).
- Input structure (training mode):
- input_dir/
train/part-00000.csv, part-00001.csv, … val/part-00000.csv, part-00001.csv, … test/part-00000.csv, part-00001.csv, …
- Output structure (training mode):
- output_dir/
train/part-00000.csv, part-00001.csv, … (imputed, same format) val/part-00000.csv, part-00001.csv, … (imputed, same format) test/part-00000.csv, part-00001.csv, … (imputed, same format)
- Parameters:
input_dir (str) – Base input directory
output_dir (str) – Base output directory
signature_columns (List[str] | None) – Optional column names for CSV/TSV
job_type (str) – ‘training’, ‘validation’, ‘testing’, ‘calibration’
label_field (str) – Label column to exclude
imputation_config (Dict[str, Any]) – Imputation configuration
max_workers (int | None) – Number of parallel workers
model_artifacts_input_dir (str | None) – Input model artifacts directory
model_artifacts_output_dir (str | None) – Output model artifacts directory
logger (Callable | None) – Logging function
- Returns:
Dictionary with total row counts per split
- Return type:
- load_split_data(job_type, input_dir)[source]¶
Load data according to job_type with automatic format detection.
For ‘training’: Loads data from train, test, and val subdirectories For others: Loads single job_type split
- save_output_data(job_type, output_dir, data_dict)[source]¶
Save processed data according to job_type, preserving input format.
For ‘training’: Saves data to train, test, and val subdirectories For others: Saves to single job_type directory
- validate_imputation_data(df, label_field, exclude_columns=None)[source]¶
Validate data for imputation processing.
- load_imputation_config(environ_vars)[source]¶
Load imputation configuration from environment variables.
- validate_text_fill_value(value)[source]¶
Validate that a text fill value won’t be interpreted as NA by pandas.
- detect_column_type(df, column, config)[source]¶
Enhanced data type detection for imputation strategy selection.
- class ImputationStrategyManager(config)[source]¶
Bases:
objectEnhanced strategy manager supporting numerical, text, and categorical data types.
- class SimpleImputationEngine(strategy_manager, label_field)[source]¶
Bases:
objectCore engine for simple statistical imputation methods.
- save_imputation_artifacts(imputation_engine, imputation_config, output_path)[source]¶
Save imputation artifacts to the specified output path.
Output format matches XGBoost training’s impute_dict.pkl format: A simple dictionary mapping column names to imputation values.
- Parameters:
imputation_engine (SimpleImputationEngine) – SimpleImputationEngine instance with fitted parameters
imputation_config (Dict[str, Any]) – Imputation configuration dictionary
output_path (Path) – Path to save artifacts to
- load_imputation_parameters(imputation_params_path)[source]¶
Load imputation parameters from a pickle file.
Expected format (XGBoost training compatible): Simple dict mapping column names to imputation values: {column: value}
- Parameters:
imputation_params_path (Path) – Path to the imputation parameters file
- Returns:
imputation_value}
- Return type:
Dictionary of imputation parameters {column_name
- process_data(data_dict, label_field, job_type, imputation_config, imputation_parameters=None)[source]¶
Core data processing logic for missing value imputation.
- Parameters:
data_dict (Dict[str, DataFrame]) – Dictionary of dataframes keyed by split name
label_field (str) – Target column name
job_type (str) – Type of job (training, validation, testing, calibration)
imputation_config (Dict[str, Any]) – Imputation configuration dictionary
imputation_parameters (Dict | None) – Pre-fitted imputation parameters (simple dict {column: value})
- Returns:
Dictionary of imputed dataframes
SimpleImputationEngine instance with fitted parameters
- Return type:
Tuple containing
- generate_imputation_report(imputation_engine, missing_analysis, validation_report, output_dir)[source]¶
Generate comprehensive imputation report with statistics and insights.
- calculate_imputation_quality_metrics(imputation_summary)[source]¶
Calculate quality metrics for imputation process.
- generate_imputation_recommendations(imputation_summary, missing_analysis)[source]¶
Generate actionable recommendations based on imputation analysis.
- copy_existing_artifacts(src_dir, dst_dir)[source]¶
Copy all existing model artifacts from previous processing steps.
This enables the parameter accumulator pattern where each step: 1. Copies artifacts from previous steps 2. Adds its own artifacts 3. Passes all artifacts to the next step
- generate_imputation_text_summary(report)[source]¶
Generate human-readable text summary of imputation process.
- internal_main(job_type, input_dir, output_dir, imputation_config, label_field, model_artifacts_input_dir=None, model_artifacts_output_dir=None, enable_true_streaming=False, max_workers=None, load_data_func=<function load_split_data>, save_data_func=<function save_output_data>)[source]¶
Main logic for missing value imputation, handling both training and inference modes.
Supports two modes: - Batch mode (default): Loads entire splits into memory - Streaming mode: Processes shards in parallel (memory-efficient)
- Parameters:
job_type (str) – Type of job (training, validation, testing, calibration)
input_dir (str) – Input directory for data
output_dir (str) – Output directory for processed data
imputation_config (Dict[str, Any]) – Imputation configuration dictionary
label_field (str) – Target column name
model_artifacts_input_dir (str | None) – Directory containing model artifacts from previous steps
model_artifacts_output_dir (str | None) – Directory to save model artifacts for next steps
enable_true_streaming (bool) – Enable streaming mode (default: False)
signature_columns – Optional column names for streaming mode CSV/TSV
output_format – Output format for streaming mode (csv, tsv, parquet)
max_workers (int | None) – Number of parallel workers for streaming mode
load_data_func (Callable) – Function to load data (for dependency injection in tests)
save_data_func (Callable) – Function to save data (for dependency injection in tests)
- Returns:
Dictionary of imputed dataframes (empty in streaming mode)
SimpleImputationEngine instance with fitted parameters (or None in streaming)
- Return type:
Tuple containing
- main(input_paths, output_paths, environ_vars, job_args=None)[source]¶
Standardized main entry point for missing value imputation script.
- Parameters:
input_paths (Dict[str, str]) – Dictionary of input paths with logical names - “data_input”: Input data directory (from tabular_preprocessing) - “model_artifacts_input”: Model artifacts from previous steps (standardized)
output_paths (Dict[str, str]) – Dictionary of output paths with logical names - “data_output”: Output directory for imputed data - “model_artifacts_output”: Model artifacts output for next steps (standardized)
environ_vars (Dict[str, str]) – Dictionary of environment variables
job_args (Namespace | None) – Command line arguments containing job_type
- Returns:
Dictionary of imputed dataframes
SimpleImputationEngine instance with fitted parameters
- Return type:
Tuple containing