L'Ajusted Rand Index

a marqué ce sujet comme résolu.

Salut !

Je travaille actuellement sur un projet pour mes études en machine learning.

J’ai un dataset d’un site e-commerce, j’ai pu faire une analyse exploratoire, le feature engineering et le clustering avec K-Means pour déterminer des groupes de personnes en suivant une RFM.

Désormais, je dois vérifier la stabilité temporelle de ma solution de clustering.

J’ai un dataset avec les colonnes suivante :

customer_id,(days)last_purchase,total_orders,total_spend  

Grâce à (days)last_purchase, je calcule le timestamp de la dernière commande passé par le client en partant d’aujourd’hui.

Je l’ajoute et finis donc avec les colonnes suivantes :

customer_id,(days)last_purchase,total_orders,total_spend, last_order_timestamp 

Ensuite, je poursuis en créant d’autres dataset par mois (exemple toutes les commandes de Janvier dans le dataframe january, ainsi de suite pour les autres mois)

J’ai ainsi un dataframe avec les commandes du mois correspondant sur tout les mois de l’années (12 dataframe). J’ai également le dataframe contenant toute les commandes.

Mon objectif est de calculer la stabilité du clustering et j’ai vu qu’il existait la méthode ARI.

Mais je ne suis pas sûr de bien comprendre ce que je dois faire étape par étape.

Pour l’instant, je fais comme suit :

data['order_purchase_timestamp'] = 'none'

for i, row in data.iterrows():
    data.loc[i, ['order_purchase_timestamp']] = (datetime.now() - timedelta(days=row['(days)last_purchase'])).strftime("%d/%m/%Y")

def kmean_process_date(data_period, data_init):
    kmeans = KMeans(n_clusters=5,init='k-means++').fit(data_period)
    kmeans2 = KMeans(n_clusters=5,n_init=1,init='random').fit(data_init)
    return adjusted_rand_score(kmeans2.labels_, kmeans.labels_)

all_dates = {
    "01/01/2022": "02/01/2022",
    "02/01/2022": "03/01/2022",
    "03/01/2022": "04/01/2022",
    "04/01/2022": "05/01/2022",
    "05/01/2022": "06/01/2022",
    "06/01/2022": "07/01/2022",
    "07/01/2022": "08/01/2022",
    "08/01/2022": "09/01/2022",
    "09/01/2022": "10/01/2022",
    "10/01/2022": "11/01/2022",
    "11/01/2022": "12/01/2022"
}

mesurate_ari_by_month = {}

def calculate_kmean_by_month():
    for key in all_dates:
        data_temp = pd.DataFrame({})
        start_date = key
        end_date = all_dates[key]
        for i in range(0, len(data)):
            is_in_period = datetime.strptime(start_date, "%d/%m/%Y") < datetime.strptime(data.at[i, 'order_purchase_timestamp'], '%d/%m/%Y') < datetime.strptime(end_date, "%m/%d/%Y")

            if is_in_period:
                data_var = data.loc[[i]]
                data_temp = pandas.concat([data_temp, data_var])

        data_period = pd.DataFrame({ '(days)last_purchase': data_temp['(days)last_purchase'], 'total_orders': data_temp['total_orders'], 'total_spend': data_temp['total_spend'] })
        data_init = pd.DataFrame({ '(days)last_purchase': data['(days)last_purchase'], 'total_orders': data['total_orders'], 'total_spend': data['total_spend'] })

        mesurate_ari_by_month[start_date] = kmean_process_date(data_period, data_init[0:len(data_period)])  

calculate_kmean_by_month() 

Cela me donne un graphique sous cette forme : image.png

Mais je suis certains de ne pas avoir bien compris comment l’utiliser (malgré mes recherches)

Le repo est disponible ici

Merci à tous

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte