Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Quick comparison between original and cleaned dataset performance | |
| """ | |
| import pandas as pd | |
| import numpy as np | |
| from sklearn.model_selection import train_test_split | |
| from sklearn.ensemble import RandomForestRegressor | |
| from sklearn.preprocessing import LabelEncoder | |
| from sklearn.metrics import r2_score, mean_squared_error | |
| import warnings | |
| warnings.filterwarnings('ignore') | |
| def test_dataset_performance(df, dataset_name="Dataset"): | |
| """Test model performance on a given dataset""" | |
| print(f"\n{'='*50}") | |
| print(f"TESTING {dataset_name.upper()}") | |
| print(f"{'='*50}") | |
| # Basic stats | |
| print(f"Shape: {df.shape}") | |
| print(f"Missing values: {df.isnull().sum().sum():,}") | |
| # Prepare data - find yield column | |
| yield_cols = [col for col in df.columns if 'yield' in col.lower()] | |
| if not yield_cols: | |
| print("โ No yield column found!") | |
| return None | |
| target_col = yield_cols[0] | |
| print(f"Target column: {target_col}") | |
| # Remove zero yields for modeling | |
| df_model = df[df[target_col] > 0].copy() | |
| print(f"Non-zero yield records: {len(df_model):,}") | |
| if len(df_model) < 100: | |
| print("โ Insufficient non-zero yield data!") | |
| return None | |
| # Select features | |
| numerical_cols = df_model.select_dtypes(include=[np.number]).columns.tolist() | |
| numerical_cols = [col for col in numerical_cols if col not in [target_col, 'Crop_Year']] | |
| # Add categorical features with encoding | |
| categorical_cols = ['Crop', 'Season', 'State'] | |
| feature_cols = [] | |
| # Add numerical features | |
| for col in numerical_cols: | |
| if col in df_model.columns and df_model[col].notna().sum() > len(df_model) * 0.5: | |
| feature_cols.append(col) | |
| X = df_model[feature_cols].copy() | |
| # Handle missing values by filling with median | |
| for col in X.columns: | |
| X[col] = X[col].fillna(X[col].median()) | |
| # Add encoded categorical features | |
| le_dict = {} | |
| for col in categorical_cols: | |
| if col in df_model.columns: | |
| le = LabelEncoder() | |
| X[col + '_encoded'] = le.fit_transform(df_model[col].fillna('Unknown')) | |
| le_dict[col] = le | |
| y = df_model[target_col] | |
| print(f"Features used: {len(X.columns)}") | |
| print(f"Target range: {y.min():.2f} to {y.max():.2f}") | |
| # Train model | |
| try: | |
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) | |
| model = RandomForestRegressor(n_estimators=50, random_state=42) # Smaller for quick test | |
| model.fit(X_train, y_train) | |
| y_pred = model.predict(X_test) | |
| r2 = r2_score(y_test, y_pred) | |
| rmse = np.sqrt(mean_squared_error(y_test, y_pred)) | |
| print(f"โ Rยฒ Score: {r2:.4f}") | |
| print(f"โ RMSE: {rmse:.2f}") | |
| return { | |
| 'dataset': dataset_name, | |
| 'records_used': len(df_model), | |
| 'features': len(X.columns), | |
| 'r2_score': r2, | |
| 'rmse': rmse, | |
| 'missing_values': df.isnull().sum().sum() | |
| } | |
| except Exception as e: | |
| print(f"โ Error: {str(e)}") | |
| return None | |
| def main(): | |
| print("๐ COMPARING ORIGINAL VS CLEANED DATASET PERFORMANCE") | |
| print("="*80) | |
| # Load datasets | |
| try: | |
| original_df = pd.read_csv("/home/aiavid/Yeild_pred_SIH/data/combined_crop_data.csv") | |
| cleaned_df = pd.read_csv("/home/aiavid/Yeild_pred_SIH/data/combined_crop_data_cleaned.csv") | |
| except Exception as e: | |
| print(f"โ Error loading datasets: {str(e)}") | |
| return | |
| # Test both datasets | |
| original_results = test_dataset_performance(original_df, "ORIGINAL DATASET") | |
| cleaned_results = test_dataset_performance(cleaned_df, "CLEANED DATASET") | |
| # Compare results | |
| if original_results and cleaned_results: | |
| print(f"\n{'='*80}") | |
| print("COMPARISON RESULTS") | |
| print(f"{'='*80}") | |
| print("\n| Metric | Original | Cleaned | Improvement |") | |
| print("|--------|----------|---------|-------------|") | |
| # Missing values | |
| orig_missing = original_results['missing_values'] | |
| clean_missing = cleaned_results['missing_values'] | |
| missing_improvement = ((orig_missing - clean_missing) / orig_missing * 100) if orig_missing > 0 else 0 | |
| print(f"| Missing Values | {orig_missing:,} | {clean_missing:,} | {missing_improvement:.1f}% reduction |") | |
| # Records used | |
| orig_records = original_results['records_used'] | |
| clean_records = cleaned_results['records_used'] | |
| record_improvement = ((clean_records - orig_records) / orig_records * 100) if orig_records > 0 else 0 | |
| print(f"| Usable Records | {orig_records:,} | {clean_records:,} | {record_improvement:+.1f}% |") | |
| # Rยฒ Score | |
| orig_r2 = original_results['r2_score'] | |
| clean_r2 = cleaned_results['r2_score'] | |
| r2_improvement = clean_r2 - orig_r2 | |
| print(f"| Rยฒ Score | {orig_r2:.4f} | {clean_r2:.4f} | {r2_improvement:+.4f} |") | |
| # RMSE | |
| orig_rmse = original_results['rmse'] | |
| clean_rmse = cleaned_results['rmse'] | |
| rmse_improvement = ((orig_rmse - clean_rmse) / orig_rmse * 100) if orig_rmse > 0 else 0 | |
| print(f"| RMSE | {orig_rmse:.2f} | {clean_rmse:.2f} | {rmse_improvement:.1f}% better |") | |
| print(f"\n๐ฏ **OVERALL ASSESSMENT:**") | |
| print(f" ๐ Model Accuracy Improved by {r2_improvement:+.4f} Rยฒ points") | |
| print(f" ๐ Prediction Error Reduced by {rmse_improvement:.1f}%") | |
| print(f" ๐งน Data Quality Improved: {missing_improvement:.1f}% fewer missing values") | |
| if clean_r2 > 0.9: | |
| print(f" ๐ **EXCELLENT** model performance achieved!") | |
| elif clean_r2 > 0.8: | |
| print(f" ๐ฅ **VERY GOOD** model performance achieved!") | |
| elif clean_r2 > 0.7: | |
| print(f" ๐ฅ **GOOD** model performance achieved!") | |
| else: | |
| print(f" ๐ Model performance: **ACCEPTABLE**") | |
| if __name__ == "__main__": | |
| main() | |