0
votes

Corrélation entre le spam et la semaine

J'essaie de vérifier s'il y a une corrélation entre SPAM e-mails et la semaine strong>.

Mon Dataframe code> ressemble à ce qui suit: p>

TypeError: unsupported operand type(s) for /: 'str' and 'int'


8 commentaires

Pouvez-vous clarifier la "corrélation"?


@Marat: corrélation Pearson. Je pense que je devrai coder en semaine


La semaine est une valeur catégorique, pas numérique. Vous ne pouvez pas utiliser la corrélation Pearson pour cela (Eh bien, à moins que vous n'ayez une raison forte de croire qu'il existe une dépendance linéaire)


merci Marat. Donc, je devrai coder la colonne de la semaine, n'est-ce pas?


Je ne sais pas - c'est exactement ma question. Quel genre de résultat voulez-vous voir ici?


Une relation qui peut montrer si le courrier électronique de spam est plus probable se propager samedi (par exemple)


Une approche commune consiste à calculer une chance d'obtenir des statistiques de samedi par hasard, compte tenu de tous les autres jours. Vous pouvez calculer la différence entre les moyens de taux de spam, la taille des effets ou la distance entre les distributions. N'importe lequel d'entre eux sera un début raisonnable; Ce qui est important, c'est de prendre en compte le hasard


Pour voir si le spam est inhabituellement plus élevé ou plus bas un jour donné, vous avez besoin d'une métrique catégorique. Le coefficient de corrélation concerne les données avec une relation continue, telle que notant une tendance à augmenter le spam à la semaine. Essayez plutôt un test chi-carré.


3 Réponses :


0
votes

Vous travaillez avec des caractéristiques ou des étiquettes catégoriques. Il n'est pas vraiment significatif de regarder la corrélation.

Au lieu de cela, vous devriez simplement regarder des histogrammes: xxx

et obtenir quelque chose comme ceci:

< un href = "https://i.stack.imgur.com/9p2pb.png" rel = "nOfollow noreferrer"> Entrez la description de l'image ici

Ce qui précède vous donnerait le nombre absolu pour chaque combinaison spam / jour. Vous pouvez également visualiser le compteur relative avec value_counts : xxx

et vous obtenez:

Entrez la description de l'image ici


1 commentaires

Merci beaucoup pour vous suggestion, Quang Hoang. Vraiment apprécié



0
votes

Convertissez les jours de la semaine en un numéro de 0 à 6, puis exécutez numpy.corcoef


2 commentaires

C'est la solution incorrecte évidente, en supposant que la dépendance linéaire entre les jours de semaine et le taux de spam


Pourtant, c'est la question posée - s'il y a ou non une dépendance linéaire.



1
votes

donné que vous avez une variable catégorique et catégorique, Cramer's V est la métrique idéale que vous devez utiliser -

import scipy.stats as ss
def cramers_corrected_stat(confusion_matrix):
    """ calculate Cramers V statistic for categorical-categorical association.
        uses correction from Bergsma and Wicher, 
        Journal of the Korean Statistical Society 42 (2013): 323-328
    """
    chi2 = ss.chi2_contingency(confusion_matrix)[0]
    n = confusion_matrix.sum().sum()
    phi2 = chi2/n
    r,k = confusion_matrix.shape
    phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))    
    rcorr = r - ((r-1)**2)/(n-1)
    kcorr = k - ((k-1)**2)/(n-1)
    return np.sqrt(phi2corr / min( (kcorr-1), (rcorr-1)))
cramers_corrected_stat(pd.crosstab(df['Spam?'], df['Day']))


0 commentaires