+
    LµCj—  ã                   óº   € R t ^ RIt^ RIHt ^ RIt^ RIt^ RIHt ^ RI	H
t
Ht ^ RIHt ^ RIt^ RIHtHtHt ]! ]4      t. ROtRtR R	 lt]R
8X  d
   ]! 4        R# R# )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Úfeasibility_labelc                ó   € V ^8„  d   QhRR/# )é   ÚreturnN© )Úformats   "ÚWC:\Crop_Prediction\Backend\crop-ai-system\ml_pipeline\training\train_xgb_feasibility.pyÚ__annotate__r   $   s   € ÷ Z8ñ Z8ˆdñ Z8ó    c                  ó6  € \         P                  ! R R7      p V P                  RRR7       V P                  RRR7       V P                  4       p\        P
                  ! VP                  4      p\        \        \        .,           4      \        VP                  4      ,
          pV'       d   \        RV 24      hVP                  \        \        .,           R7      p\        \        V4      R^dR	7       V\        ,          P                  p\!        4       pVP#                  V\        ,          4      p\        P$                  ! V\        ,          4      P'                  4       p\(        P+                  R
V 24       VP-                  4       ^8  d(   \(        P/                  RVP-                  4        R24       \1        WFR^*VR7      w  r‰r«\2        P4                  ! R^RRR^*RR7      pVP7                  WŠW›3.RR7       VP9                  V	4      p\;        W½VP<                  RR7      p\(        P+                  R\;        W½VP<                  R7       24       \?        WÄV^RR7      p\(        P+                  RVPA                  4       R RVPC                  4       R 24       VPA                  4       R8  d)   \(        P/                  RVPA                  4       R  R!24       \E        VPF                  4      pVPI                  RRR"7       R#VR$VR%\        /pVR&,          p\J        PL                  ! VV4       \O        VRR'VR(\Q        VPA                  4       4      R)\Q        VPC                  4       4      /\        \        V4      \        V	4      R*7       \(        P+                  R+V 24       R,# )-z$Train XGBoost feasibility classifier)Údescriptionz--inputT)Úrequiredz--output-dirz#Input is missing required columns: )ÚsubsetÚxgb_feasibility)Ú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.pklr   Úcv_accuracy_meanÚcv_accuracy_std)Ú
model_nameÚmetricsr.   Ún_trainÚn_testzSaved model bundle to N))Ú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_testr,   Úy_predÚreportÚ	cv_scoresrR   ÚbundleÚoutput_paths                      r   Úmainrh   $   s  € Ü×$Ò$Ð1WÔX€FØ
×Ñ˜	¨DÐÔ1Ø
×Ñ˜°ÐÔ6Ø×ÑÓ€Dä	�Š�T—Z‘ZÓ	 €Bä”¬-¨Õ8Ó9¼CÀÇ
Á
»OÕK€LßÜÐ>¸|¸nÐMÓNÐNà	�‰œ/¬]¨OÕ;ˆÓ	<€Bô œ#˜b›'Ð#4¸cÕBà
Œ?Õ×"Ñ"€AÜ	‹€BØ
×Ñ˜œMÕ*Ó+€Aä—9’9˜R¤Õ.Ó/×<Ñ<Ó>€LÜ
‡K�KÐ'¨ ~Ð6Ô7Ø×ÑÓ˜BÔÜ�‰Ø& |×'7Ñ'7Ó'9Ð&:ð ;8ð 9ô	
ô (8Ø	˜¨"°qô(Ñ$€G�Wô ×ÒØØØØØØØô€Eð 
‡I�IØØÐ"Ð#Øð ô ð �]‰]˜6Ó"€FÜ" 6ÀÇÁÐY]Ô^€FÜ
‡K�KÐ3Ô4IÈ&Ðgi×grÑgrÔ4sÐ3tÐuÔvä ¨!°¸:ÔF€IÜ
‡K�KÐ& y§~¡~Ó'7¸Ð&<¸EÀ)Ç-Á-Ã/ÐRUÐAVÐWÔXà‡~�~Ó˜#ÔÜ�‰Ø*¨9¯>©>Ó+;¸CÐ*@ð AQð Rô	
ô �d—o‘oÓ&€JØ×Ñ˜T¨DÐÔ1à�u˜o¨r°>Ä?ÐS€FØÐ4Õ4€KÜ
‡K‚K�˜Ô$äØØ$à# VØ¤ i§n¡nÓ&6Ó 7Øœu Y§]¡]£_Ó5ð
ô
 %Ü�G“Ü�6‹{õô ‡K�KÐ(¨¨Ð6Ö7r   Ú__main__)Ú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)Ú__doc__r5   Úpathlibr   rT   ÚxgboostrK   Úsklearn.metricsr   Úsklearn.model_selectionr   r   Úsklearn.preprocessingr   Úpandasr9   Ú#ml_pipeline.training.training_utilsr   r   r	   Ú__name__rG   r=   r>   rh   r   r   r   Ú<module>r      s]   ðñó Ý ã Û Ý 1ß EÝ .ã ç iÑ iá	�HÓ	€ò€ð $€õZ8ðz ˆzÔÙ†Fñ r   