
    LCj                         d Z ddlZddlmZ ddlZddlZddlmZ ddl	m
Z
mZ ddlmZ ddlZddlmZmZmZ  ee      Zg dZd	Zdd
Zedk(  r e        yy)z
Train the XGBoost crop feasibility classifier.

Usage:
    python -m ml_pipeline.training.train_xgb_feasibility         --input data/processed/final_feature_matrix.csv         --output-dir data/models/v1
    N)Path)classification_report)cross_val_scoretrain_test_split)LabelEncoder)check_minimum_samples
get_loggersave_training_metadata)rainfall_mmtemp_chumidityseason_indexrainfall_anomalyrainfall_ma3rainfall_lag1water_req_mm
min_temp_c
max_temp_cdrought_tolerantgrowth_daysfeasibility_labelc            
         t        j                  d      } | j                  dd       | j                  dd       | j                         }t	        j
                  |j                        }t        t        t        gz         t        |j                        z
  }|rt        d|       |j                  t        t        gz         }t        t        |      d	d
       |t           j                  }t!               }|j#                  |t                 }t	        j$                  |t                 j'                         }t(        j+                  d|        |j-                         dk  r't(        j/                  d|j-                          d       t1        ||dd|      \  }}	}
}t3        j4                  ddddddd      }|j7                  ||
|	|fgd       |j9                  |	      }t;        |||j<                  d      }t(        j+                  dt;        |||j<                                t?        |||dd      }t(        j+                  d |jA                         d!d"|jC                         d!       |jA                         d#k  r(t(        j/                  d$|jA                         d%d&       tE        |jF                        }|jI                  dd'       ||t        d(}|d)z  }tK        jL                  ||       tO        |d	|tQ        |jA                               tQ        |jC                               d*t        t        |      t        |	      +       t(        j+                  d,|        y )-Nz$Train XGBoost feasibility classifier)descriptionz--inputT)requiredz--output-dirz#Input is missing required columns: )subsetxgb_feasibilityd   )minimumzClass distribution:
   zSmallest class has only up    samples. Predictions for this class will be less reliable — collect more labeled examples for it if possible.g?*   )	test_sizerandom_statestratifyi,     g?g?mlogloss)n_estimators	max_depthlearning_rate	subsamplecolsample_bytreer"   eval_metricF)eval_setverbose)target_namesoutput_dictz Test set classification report:
)r.   accuracy)cvscoringz5-fold CV accuracy: z.3fz +/- g333333?zCross-validated accuracy is z.1%u   , which is low. Review feature quality and label correctness before deploying this model to production — it may not provide reliable guidance.)parentsexist_ok)modellabel_encoderfeature_colszxgb_feasibility.pkl)r   cv_accuracy_meancv_accuracy_std)
model_namemetricsr7   n_trainn_testzSaved model bundle to ))argparseArgumentParseradd_argument
parse_argspdread_csvinputsetFEATURE_COLUMNSTARGET_COLUMNcolumns
ValueErrordropnar   lenvaluesr   fit_transformSeriesvalue_countsloggerinfominwarningr   xgbXGBClassifierfitpredictr   classes_r   meanstdr   
output_dirmkdirjoblibdumpr
   float)parserargsdfmissing_colsXleyclass_countsX_trainX_testy_trainy_testr5   y_predreport	cv_scoresr[   bundleoutput_paths                      WC:\Crop_Prediction\Backend\crop-ai-system\ml_pipeline\training\train_xgb_feasibility.pymainrr   $   s!   $$1WXF
	D1
6D	TZZ	 B-89C

OKL>|nMNN	/]O;	<B #b'#4cB
?""A	B
M*+A99R./<<>L
KK'~67B&|'7'7'9&: ;8 9	
 (8	1"q($GVWf E 
II6"#   ]]6"F"66Y]^F
KK34I&RXgigrgr4s3tuvq!:FI
KK&y~~'7&<E)--/RUAVWX~~#*9>>+;C*@ AQ R	
 doo&JTD1r?SF44K
KK$$%+ %inn&6 7$Y]]_5

 %G6{ KK(67    __main__)returnN)__doc__r>   pathlibr   r]   xgboostrT   sklearn.metricsr   sklearn.model_selectionr   r   sklearn.preprocessingr   pandasrB   #ml_pipeline.training.training_utilsr   r	   r
   __name__rP   rF   rG   rr    rs   rq   <module>r      s]        1 E .  i i	H	 $Z8z zF rs   