
    LCjc                         d Z ddlZddlmZ ddlZddlZddl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 yield prediction regressor.

Usage:
    python -m ml_pipeline.training.train_xgb_yield         --input data/processed/final_feature_matrix.csv         --output-dir data/models/v1
    N)Path)mean_absolute_errorr2_score)train_test_split)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yield_ton_hac            
         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!        ||dd      \  }}}}	t#        j$                  ddddd      }
|
j'                  ||||	fgd       |
j)                  |      }t+        |	|      }t-        |	|      }t.        j1                  d|dd|d       |dk  rt.        j3                  d|dd       t.        j1                  d       d}g }t4        j6                  j9                  d      }t;        |      D ]k  }|j=                  t        |      t        |      d      }t#        j$                  dddd|      }|j'                  ||   ||          |j?                  |       m t5        j@                  |D cg c]  }|j)                  |       c}      }tC        t5        jD                  t5        jF                  |d !                  }t.        j1                  d"|dd#       tI        |jJ                        }|jM                  dd$       |
t        |d%}|d&z  }tO        jP                  ||       tS        |d	tC        |      tC        |      |d't        t        |      t        |      (       t.        j1                  d)|        y c c}w )*NzTrain XGBoost yield regressor)descriptionz--inputT)requiredz--output-dirz#Input is missing required columns: )subset	xgb_yieldd   )minimumg?*   )	test_sizerandom_statei,     g?g?)n_estimators	max_depthlearning_rate	subsampler    F)eval_setverbosez
Test MAE: z.3fz tonnes/ha, R2: g      ?zR2 of z.2fz means the model explains less than half the variance in yield. Treat predictions as directional, not precise, until more training data or better features are available.z9Training bootstrap ensemble for uncertainty estimation...
   )sizereplacer   )axisz5Average bootstrap uncertainty (std across ensemble): z
 tonnes/ha)parentsexist_ok)modelfeature_colsbootstrap_modelszxgb_yield.pkl)
mae_ton_har2 avg_bootstrap_uncertainty_ton_ha)
model_namemetricsr/   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   xgbXGBRegressorfitpredictr   r   loggerinfowarningnprandomdefault_rngrangechoiceappendarrayfloatmeanstdr   
output_dirmkdirjoblibdumpr	   )parserargsdfmissing_colsXyX_trainX_testy_trainy_testr.   y_predmaer2   n_bootstrapr0   rngiidxbmbootstrap_predsavg_uncertaintyrX   bundleoutput_paths                            QC:\Crop_Prediction\Backend\crop-ai-system\ml_pipeline\training\train_xgb_yield.pymainrr   #   s7   $$1PQF
	D1
6D	TZZ	 B-89C

OKL>|nMNN	/]O;	<B #b';<
?""A
=  A'71Z\']$GVWfE 
IIgw66*:);UIK]]6"F
ff
-C	&&	!B
KK*SI%5bX>?	CxRH I J	
 KKKLK
))


#C; $jjWCL$jG
 	ws|WS\*#$ hh=MNr

6 2NOOBGGBFF?$CDEO
KKGX[G\\fghdoo&JTD1 ',F .K
KK$*)0?

 %G6{ KK(67=  Os   3N__main__)returnN)__doc__r8   pathlibr   rZ   numpyrN   xgboostrG   sklearn.metricsr   r   sklearn.model_selectionr   pandasr<   #ml_pipeline.training.training_utilsr   r   r	   __name__rK   r@   rA   rr        rq   <module>r      s]         9 4  i i	H	 \8~ zF r   