ó
    †ñ:i7$  ã                   óŠ   • S SK r S SKrS SKrSSKJr  SSKJr  SSK	J
r
Jr  SSKJr  \ R                  " S5      r " S	 S
\5      rg)é    Né   )ÚExplanation)ÚExplainerError)Úconvert_to_instanceÚmatch_instance_to_dataé   )ÚKernelExplainerÚshapc                   óF   ^ • \ rS rSrSrU 4S jrSS jrS rS	S jrSr	U =r
$ )
ÚSamplingExplaineré   aí  Computes SHAP values using an extension of the Shapley sampling values explanation method
(also known as IME).

SamplingExplainer computes SHAP values under the assumption of feature independence and is an
extension of the algorithm proposed in "An Efficient Explanation of Individual Classifications
using Game Theory", Erik Strumbelj, Igor Kononenko, JMLR 2010. It is a good alternative to
KernelExplainer when you want to use a large background set (as opposed to a single reference
value for example).

Parameters
----------
model : function
    User supplied function that takes a matrix of samples (# samples x # features) and
    computes the output of the model for those samples. The output can be a vector
    (# samples) or a matrix (# samples x # model outputs).

data : numpy.array or pandas.DataFrame
    The background dataset to use for integrating out features. To determine the impact
    of a feature, that feature is set to "missing" and the change in the model output
    is observed. Since most models aren't designed to handle arbitrary missing data at test
    time, we simulate "missing" by replacing the feature with the values it takes in the
    background dataset. So if the background dataset is a simple sample of all zeros, then
    we would approximate a feature being missing by setting it to zero. Unlike the
    KernelExplainer, this data can be the whole training set, even if that is a large set. This
    is because SamplingExplainer only samples from this background dataset.

c                 ó  >• [         R                  n[         R                  [        R                  5        [
        TU ]  " X40 UD6  [         R                  U5        [        U R                  5      S:w  a  SU R                   3n[        U5      eg )NÚidentityz7SamplingExplainer only supports the identity link, not )
ÚlogÚlevelÚsetLevelÚloggingÚERRORÚsuperÚ__init__ÚstrÚlinkÚ
ValueError)ÚselfÚmodelÚdataÚkwargsr   ÚemsgÚ	__class__s         €Ú\/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/shap/explainers/_sampling.pyr   ÚSamplingExplainer.__init__+   sj   ø€ ä—	‘	ˆÜ�‰”W—]‘]Ô#Ü‰Ò˜Ñ/¨Ò/Ü�‰�UÔäˆt�y‰y‹>˜ZÓ'ØLÈTÏYÉYÈKÐXˆDÜ˜TÓ"Ð"ð (ó    c                 ó&  • [        U[        R                  5      (       a"  [        UR                  5      nUR
                  nOS nU R                  XS9n[        U[        5      (       a  [        R                  " USS9n[        XPR                  XS9nU$ )N©Únsampleséÿÿÿÿ)Úaxis)Úfeature_names)Ú
isinstanceÚpdÚ	DataFrameÚlistÚcolumnsÚvaluesÚshap_valuesÚnpÚstackr   Úexpected_value)r   ÚXÚyr%   r(   ÚvÚes          r    Ú__call__ÚSamplingExplainer.__call__6   su   € Ü�aœŸ™×&Ñ&Ü  §¡›OˆMØ—‘‰Aà ˆMà×Ñ˜QÐÐ2ˆÜ�aœ×ÑÜ—’˜ Ñ$ˆAÜ˜×.Ñ.°ÑOˆØˆr"   c           	      ó2  • [        U5      n[        X0R                  5        [        U R                  R                  5      U R
                  :w  a  Sn[        U5      eU R                  UR                  5      U l	        [        U R                  5      U l
        U R                  (       a*  U R                  R                  UR                  5       5      nO%U R                  R                  UR                  5      n[        U[         R"                  [         R$                  45      (       a  UR&                  S   nUS   U l        U R*                  (       d&  [,        R.                  " U R(                  /5      U l        U R                  S:X  a€  [,        R0                  " [        U R                  R                  5      U R2                  45      n[,        R0                  " [        U R                  R                  5      U R2                  45      nGO÷U R                  S:X  aÊ  [,        R0                  " [        U R                  R                  5      U R2                  45      n[,        R0                  " [        U R                  R                  5      U R2                  45      nU R(                  U R4                  -
  n[7        U R2                  5       H  n	X‰   X`R                  S   U	4'   M     GOUR9                  SS5      U l        U R:                  S:X  a  SU R                  -  U l        UR9                  SS5      n
U R:                  nSnX°R                  U
-  :”  a  X°R                  U
-  -
  nX¼-  n[,        R<                  " U R                  [,        R>                  S	9S
-  X°R                  S
-  -  -  n[7        X°R                  S
-  -  S
-  5       H  nXÞ==   S
-  ss'   M     [,        R0                  " U R
                  U R2                  45      n[,        R0                  " U R
                  U R2                  45      n[,        R0                  " URA                  5       S
-  U R                  R                  RB                  S   45      U l"        [G        U R                  5       HZ  u  pïU RI                  XðR                  R                  UR                  U R                  R                  XÞ   S9u  XoS S 24'   XS S 24'   M\     URK                  5       S:X  a  US-  nXwRK                  S5      [,        RL                  S S 24   -  nXpR                  S S 24   RO                  S5      U-  RQ                  [R        5      n[7        [        U5      5       H  nUU   S
-  S:X  d  M  UU==   S-  ss'   M      [7        [        U5      5       HI  nURK                  5       U:”  a  UU==   S
-  ss'   M&  URK                  5       U:  a  UU==   S
-  ss'   MI    O   [,        R0                  " URA                  5       S
-  U R                  R                  RB                  S   45      U l"        [G        U R                  5       H¢  u  pïUU   S:”  d  M  U RI                  XðR                  R                  UR                  U R                  R                  UU   S9u  nnXÞ   UU   -   nXoS S 24   XÞ   -  UUU   -  -   U-  XoS S 24'   XS S 24   XÞ   -  UUU   -  -   U-  XS S 24'   M¤     [G        U R                  5       H1  u  pïXS S 24==   [,        RT                  " XÞ   UU   -   5      -  ss'   M3     U R(                  URK                  S5      -
  U R4                  -
  n[7        U R2                  5       Hh  nUS S 2U4   US S 2U4   RA                  5       -  S-  nUU   UUURK                  5       -  SURK                  5       -   -  -
  -  nUS S 2U4==   U-  ss'   Mj     URB                  S   S:X  a	  US S 2S4   nU$ )Nz2SamplingExplainer does not support feature groups!r   r   r%   Úautoiè  Úmin_samples_per_featureéd   )Údtyper   r$   g    €„.A)+r   r   r   ÚlenÚgroupsÚPr   Úvarying_groupsÚxÚvaryingIndsÚMÚ
keep_indexr   ÚfÚconvert_to_dfr)   r*   r+   ÚSeriesr.   ÚfxÚ
vector_outr0   ÚarrayÚzerosÚDÚfnullÚrangeÚgetr%   ÚonesÚint64ÚmaxÚshapeÚX_maskedÚ	enumerateÚsampling_estimateÚsumÚnewaxisÚmeanÚastypeÚintÚsqrt)r   Úincoming_instancer   Úinstancer   Ú	model_outÚphiÚphi_varÚdiffÚdr;   Úround1_samplesÚround2_samplesÚnsamples_each1ÚiÚindÚnsamples_each2ÚvalÚvarÚtotal_samplesÚ	sum_errorr5   Úadjs                          r    ÚexplainÚSamplingExplainer.explainC   s“  € ä&Ð'8Ó9ˆÜ˜x¯©Ô3äˆt�y‰y×ÑÓ  D§F¡FÓ*ØGˆDÜ  Ó&Ð&ð  ×.Ñ.¨x¯z©zÓ:ˆÔä�T×%Ñ%Ó&ˆŒð �?�?ØŸ
™
Ÿ™ X×%;Ñ%;Ó%=Ó>‰IàŸ
™
Ÿ™ X§Z¡ZÓ0ˆIÜ�i¤"§,¡,´·	±	Ð!:×;Ñ;Ø!×(Ñ(¨Ñ+ˆIØ˜A‘,ˆŒà��Ü—h’h §¡˜yÓ)ˆDŒGð �6‰6�Q‹;Ü—(’(œC §	¡	× 0Ñ 0Ó1°4·6±6Ð:Ó;ˆCÜ—h’h¤ D§I¡I×$4Ñ$4Ó 5°t·v±vÐ>Ó?ŠGð �V‰V�q‹[Ü—(’(œC §	¡	× 0Ñ 0Ó1°4·6±6Ð:Ó;ˆCÜ—h’h¤ D§I¡I×$4Ñ$4Ó 5°t·v±vÐ>Ó?ˆGØ—7‘7˜TŸZ™ZÑ'ˆDÜ˜4Ÿ6™6–]�Ø.2©g�×$Ñ$ QÑ'¨Ð*Ó+ó #ð #ŸJ™J z°6Ó:ˆDŒMØ�}‰} Ó&Ø $ t§v¡v¡�”à&,§j¡jÐ1JÈCÓ&PÐ#Ø!Ÿ]™]ˆNØˆNØ§¡Ð)@Ñ @Ó@Ø!/·&±&Ð;RÑ2RÑ!R�ØÑ0�ô  ŸWšW T§V¡V´2·8±8Ñ<¸qÑ@ÀN×W]ÑW]Ð`aÑWaÑDbÑcˆNÜ˜N¯f©f°q©jÑ9¸aÑ?Ö@�ØÓ! QÑ&Õ!ñ Aô —(’(˜DŸF™F D§F¡FÐ+Ó,ˆCÜ—h’h §¡¨¯©Ð/Ó0ˆGÜŸHšH n×&8Ñ&8Ó&:¸QÑ&>ÀÇ	Á	ÇÁ×@TÑ@TÐUVÑ@WÐ%XÓYˆDŒMÜ# D×$4Ñ$4Ö5‘�Ø/3×/EÑ/EØŸ™Ÿ™ x§z¡z°4·9±9·>±>ÈNÑL]ð 0Fð 0Ñ,�š�F‘˜Wª! V›_ñ 6ð �{‰{‹} Ó!Ø˜1‘�Ø—{‘{ 1“~¤b§j¡j²! mÑ4Ñ4ˆGØ%×&6Ñ&6ºÐ&9Ñ:×?Ñ?ÀÓBÀ^ÑS×[Ñ[Ô\_Ó`ˆNÜœ3˜~Ó.Ö/�Ø! !Ñ$ qÑ(¨AÕ-Ø" 1Ó%¨Ñ*Õ%ñ 0ô œ3˜~Ó.Ö/�Ø!×%Ñ%Ó'¨.Ó8Ø" 1Ó%¨Ñ*Õ%Ø#×'Ñ'Ó)¨NÓ:Ø" 1Ó%¨Ñ*Õ%áñ 0ô ŸHšH n×&8Ñ&8Ó&:¸QÑ&>ÀÇ	Á	ÇÁ×@TÑ@TÐUVÑ@WÐ%XÓYˆDŒMÜ# D×$4Ñ$4Ö5‘�Ø! !Ñ$ qÕ(Ø#×5Ñ5ØŸZ™ZŸ\™\¨8¯:©:°t·y±y·~±~ÐP^Ð_`ÑPað  6ð  ‘H�C˜ð %3Ñ$5¸ÀqÑ8IÑ$I�MØ#&ªA v¡;°Ñ1BÑ#BÀSÈ>ÐZ[ÑK\ÑE\Ñ#\Ð`mÑ"m�CšQ˜‘KØ'.²A¨v¡¸Ñ9JÑ'JÈSÐSaÐbcÑSdÑMdÑ'dÐhuÑ&u�G¢˜F“Oñ 6ô $ D×$4Ñ$4Ö5‘�ØšQ˜“¤2§7¢7¨>Ñ+<¸~ÈaÑ?PÑ+PÓ#QÑQ•ñ 6ð Ÿ™ #§'¡'¨!£*Ñ,¨t¯z©zÑ9ˆIÜ˜4Ÿ6™6–]�ð šQ ˜T‘] WªQ°¨T¡]×%6Ñ%6Ó%8Ñ8¸CÑ?�Ø ‘l a¨1¨q¯u©u«w©;¸1¸q¿u¹u»w¹;Ñ*GÑ&GÑH�Ø’A�q�D“	˜SÑ •	ñ #ð �9‰9�Q‰<˜1ÓØ’a˜�d‘)ˆCàˆ
r"   c                 ót  • U R                   S US-  2S S 24   n[        R                  " UR                  S   5      n[	        U5       H¦  n[        R
                  R                  U5        [        R                  " Xq:H  5      S   S   n	[        R
                  R                  UR                  S   5      n
X6US S 24'   XJXyS-   S  4   XhXyS-   S  4'   X6US-   * S S 24'   XJXyS  4   XhS-   * XyS  4'   M¨     U" U5      nUS U nXµS  S S S2   nXÍ-
  n[        R                  " US5      [        R                  " US5      4$ )Nr   r   r   r&   )rU   r0   ÚarangerT   rO   ÚrandomÚshuffleÚwhereÚrandintrZ   rl   )r   ÚjrF   rB   r3   r%   rU   Úindsrh   ÚposÚrindÚevalsÚevals_onÚ	evals_offrd   s                  r    rW   Ú#SamplingExplainer.sampling_estimate¸   s?  € Ø—=‘=  8¨a¡< ²Ð!2Ñ3ˆÜ�yŠy˜Ÿ™ ™Ó$ˆä�x–ˆAÜ�I‰I×Ñ˜dÔ#Ü—(’(˜4™9Ó% aÑ(¨Ñ+ˆCÜ—9‘9×$Ñ$ Q§W¡W¨Q¡ZÓ0ˆDØ�Qš�T‰NØ+,°4¸a¹¸	°?Ð-BÑ+CˆH˜ 1™W˜Y˜Ð'Ñ(Ø$%�q˜1‘u�Xšq�[Ñ!Ø-.°T¸$°ZÐ/?Ñ-@ˆH˜1‘u�X˜t D˜zÐ)Ó*ñ !ñ �(“ˆØ˜˜(Ð#ˆØ˜)Ð$¡T r TÑ*ˆ	ØÑ ˆä�wŠw�q˜!‹}œbŸfšf Q¨›lÐ*Ð*r"   )rD   rU   rI   r%   rC   )NiÐ  )é
   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r7   rp   rW   Ú__static_attributes__Ú__classcell__)r   s   @r    r   r      s#   ø† ñõ8	#ôòs÷j+ò +r"   r   )r   Únumpyr0   Úpandasr*   Ú_explanationr   Úutils._exceptionsr   Úutils._legacyr   r   Ú_kernelr	   Ú	getLoggerr   r   © r"   r    Ú<module>r�      s8   ðÛ ã Û å &Ý .ß GÝ $à×Ò˜Ó€ô|+˜õ |+r"   