Ë
    LµCj—  ã                   ó®   — 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_feasibilityéd   )Ú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Ô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Ø	ˆ1˜¨"°qô(Ñ$€GˆV�W˜fô ×ÑØØØØØØØô€Eð 
‡I�IØ�Ø˜6Ð"Ð#Øð ô ð �]‰]˜6Ó"€FÜ" 6¨6ÀÇÁÐY]Ô^€FÜ
‡K�KÐ3Ô4IÈ&ÐRXÐgi×grÑgrÔ4sÐ3tÐuÔvä  q¨!°¸:ÔF€IÜ
‡K�KÐ& y§~¡~Ó'7¸Ð&<¸EÀ)Ç-Á-Ã/ÐRUÐAVÐWÔXà‡~�~Ó˜#ÒÜ�‰Ø*¨9¯>©>Ó+;¸CÐ*@ð AQð Rô	
ô �d—o‘oÓ&€JØ×Ñ˜T¨DÐÔ1à¨rÄ?ÑS€FØÐ4Ñ4€KÜ
‡K�K�˜Ô$äØØ$à%+Ü % i§n¡nÓ&6Ó 7Ü$ Y§]¡]£_Ó5ñ
ô
 %Ü�G“Ü�6‹{õô ‡K�KÐ(¨¨Ð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8ðz ˆzÒÙ…Fð rs   