Passer au contenu principal
Ce tutoriel décrit comment demander les résultats d’expériences et déterminer les variations gagnantes à l’aide de l’Automation API. Il fait suite aux tutoriels précédents sur la création d’expériences, la modification de variations, l’association d’objectifs et de segments et le lancement d’expériences.

Prérequis

  • access_token
L’Automation API nécessite un access token. Récupérez le token de manière programmatique en suivant les instructions de la section Obtention d’un access token.

Objectif

Le tutoriel utilise l’exemple d’expérience suivant :
Experiment_188308
Cette expérience, appelée Product Page Redesign, comprend deux variations en plus de la version originale : Redesign 1 (ID 828220) et Redesign 2 (ID 828221). Bien que l’expérience ait plusieurs objectifs, ce tutoriel se concentrera uniquement sur l’objectif principal, qui est de suivre les souscriptions d’assurance via le Click Tracking. Ce guide décrit comment récupérer et interpréter les résultats d’expériences et appliquer des filtres.
Le tutoriel s’applique également aux expériences Feature Flag ; cependant, utilisez les endpoints https://api.kameleoon.com/feature-flags/* au lieu de https://api.kameleoon.com/experiments/* :L’experimentId se trouve dans le Rollout Planner :

1. Récupérer le code de données

Cas 1 : Récupérer les résultats directement

Endpoint : Récupérez les résultats de l’expérience en envoyant une requête POST à l’endpoint Request experiment’s result.
NomTypeDescription
experimentIdStringChamp obligatoire dans l’en-tête de la requête.
goalIdArrayFournissez l’ID d’objectif spécifique pour identifier les résultats de l’objectif principal.
referenceVariationIdObjectID de la variation de référence pour la comparaison.
sequentialTestingStringDéfinissez sur true pour utiliser le sequential testing pour déterminer les intervalles de confiance.
visitorDataStringDéfinissez sur false pour récupérer les données basées sur les visites. Définissez sur true pour les données basées sur les visiteurs.
Exemple :
curl -L -X POST 'https://api.kameleoon.com/experiments/188308/results' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
  "visitorData": false,
  "sequentialTesting": true,
  "referenceVariationId": "0",   
  "goalsIds": [
 279599
  ]
}'

Cas 2 : Partager les résultats sans autorisation

1. Récupérer un SharedToken

Endpoint : Partagez les résultats avec des utilisateurs non autorisés en récupérant un SharedToken depuis l’endpoint Share experiment results.
curl -L -X POST 'https://api.kameleoon.com/experiments/188308/results/share' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
  "visitorData": false,
  "sequentialTesting": true,
  "referenceVariationId": "0",   
  "goalsIds": [
 279599
  ]
}'
Réponse :
{
    "method": "POST",
    "url": "https://api.kameleoon.com/experiments/188308/results",
    "path": "/experiments/188308/results",
    "headers": {
        "SharedToken": "eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE4NDQ5NDI5MTMsInNoYXJlZENvZGUiOiJhZmM1NzRjN2I4MjY4NTY3NzI2YjZhMDRhMTUxMjgyNjA3Zjk1ZGI4YjA1Y2RkZGY1ZDEwM2ExZDg5ZWM0MmZmIn0.oCECNm5mEhgIthc6eejo9BrfB7p8kEIrpoqtNb4JUiHK6nsxWHMvLc4hHYXCg3DgaBlVoKv6eEZHGty9c-VAoA",
        "Content-Type": "application/json"
    },
    "payload": {
        "visitorData": false,
        "sequentialTesting": true,
        "referenceVariationId": "0",
        "goalsIds": [
            279599
        ]
    }
}

1. Récupérer le dataCode avec le SharedToken

Récupérez les résultats de l’expérience en envoyant une requête POST à l’endpoint Request experiment’s result en utilisant le SharedToken au lieu d’un access token.
NomTypeDescription
experimentIdStringChamp obligatoire dans l’en-tête de la requête.
goalIdArrayFournissez l’ID d’objectif spécifique pour identifier les résultats de l’objectif principal.
referenceVariationIdObjectID de la variation de référence pour la comparaison.
sequentialTestingStringDéfinissez sur true pour utiliser le sequential testing pour déterminer les intervalles de confiance.
visitorDataStringDéfinissez sur false pour récupérer les données basées sur les visites. Définissez sur true pour les données basées sur les visiteurs.
Exemple :
curl -L -X POST 'https://api.kameleoon.com/experiments/188308/results' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'SharedToken: <ACCESS_TOKEN>' \
--data-raw '{
  "visitorData": false,
  "sequentialTesting": true,
  "referenceVariationId": "0",   
  "goalsIds": [
 279599
  ]
}'

Réponse :
{"dataCode":"14443931880924098266207585267983330260134079899081739889989435434342588016765"}

2. Récupérer les résultats de l’expérience

Endpoint : Après avoir reçu le dataCode, utilisez l’endpoint result. Exemple :
curl -L -X GET 'https://api.kameleoon.com/results?dataCode=14443931880924098266207585267983330260134079899081739889989435434342588016765'

Réponse :

{
 "status": "READY",
 "data": {
  "dataCode": "14443931880924098266207585267983330260134079899081739889989435434342588016765",
  "variationData": {
   "_reference": {
    "breakdownData": {
     "_reference": {
      "intervalData": {},
      "generalData": {
       "visitCount": 126862,
       "visitorCount": 0,
       "goalsData": {
        "279599": {
         "conversionCount": 1898,
         "convertedVisitCount": 1898,
         "revenueCount": 235352.0,
         "convertedVisitorCount": 0,
         "revenuePerVisit": 1.86,
         "revenuePerVisitor": 0.0,
         "conversionRate": 0.014961138875313333,
         "averageCart": 124.0,
         "ratioValue": 0.0,
         "outlierBounds": {
          "lower": 0.1,
          "upper": 99.0
         }
        }
       }
      }
     }
    }
   },
   "828220": {
    "breakdownData": {
     "_reference": {
      "intervalData": {},
      "generalData": {
       "visitCount": 167938,
       "visitorCount": 0,
       "goalsData": {
        "279599": {
         "conversionCount": 7826,
         "convertedVisitCount": 7826,
         "revenueCount": 986076.0,
         "convertedVisitorCount": 0,
         "revenuePerVisit": 5.87,
         "revenuePerVisitor": 0.0,
         "reliability": 100.0,
         "improvementRange": {
          "min": 193.92,
          "max": 229.03,
          "half": 17.56
         },
         "improvementRate": 211.48,
         "conversionRate": 0.04660053114840001,
         "averageCart": 126.0,
         "ratioValue": 0.0,
         "continuousMetrics": {
          "conversions": {
           "reliability": 1.0,
           "improvementRate": 2.114771645178252,
           "halfInterval": 0.10445147824911348,
           "lowerBound": 2.0103201669291386,
           "upperBound": 2.219223123427365
          },
          "revenuePerVisit": {
           "reliability": 1.0,
           "improvementRate": 2.1650098975198366,
           "halfInterval": 0.10613617951119597,
           "lowerBound": 2.0588737180086407,
           "upperBound": 2.2711460770310326
          },
          "averageCart": null
         },
         "outlierBounds": {
          "lower": 0.1,
          "upper": 99.0
         }
        }
       }
      }
     }
    }
   },
   "828221": {
    "breakdownData": {
     "_reference": {
      "intervalData": {},
      "generalData": {
       "visitCount": 174194,
       "visitorCount": 0,
       "goalsData": {
        "279599": {
         "conversionCount": 1477,
         "convertedVisitCount": 1477,
         "revenueCount": 189056.0,
         "convertedVisitorCount": 0,
         "revenuePerVisit": 1.09,
         "revenuePerVisitor": 0.0,
         "reliability": 100.0,
         "improvementRange": {
          "min": -47.93,
          "max": -38.72,
          "half": 4.6
         },
         "improvementRate": -43.33,
         "conversionRate": 0.00847905209134643,
         "averageCart": 128.0,
         "ratioValue": 0.0,
         "continuousMetrics": {
          "conversions": {
           "reliability": 1.0,
           "improvementRate": -0.4332615877700786,
           "halfInterval": 0.027369693136479373,
           "lowerBound": -0.46063128090655797,
           "upperBound": -0.40589189463359926
          },
          "revenuePerVisit": {
           "reliability": 1.0,
           "improvementRate": -0.41497970350459723,
           "halfInterval": 0.028252586463462577,
           "lowerBound": -0.4432322899680598,
           "upperBound": -0.38672711704113466
          },
          "averageCart": null
         },
         "outlierBounds": {
          "lower": 0.1,
          "upper": 99.0
         }
        }
       }
      }
     }
    }
   }
  },
  "ventilationNames": null,
  "cupedDataByGoalId": {}
 }
}

3. Interpréter les résultats pour déterminer la variation gagnante

Les variations gagnantes doivent démontrer une grande fiabilité (supérieure à 95 %) et un taux d’amélioration positif par rapport à la variation de référence. La réponse JSON montre que Redesign 1 et Redesign 2 ont tous deux un taux de fiabilité de 100 %. Cependant, Redesign 1 a un taux d’amélioration de +211,48 % comparé au taux de -43,33 % de Redesign 2. Par conséquent, Redesign 1 est le gagnant. Redesign 1
"828220": {
    "breakdownData": {
     "_reference": {
      "intervalData": {},
      "generalData": {
       "visitCount": 167938,
       "visitorCount": 0,
       "goalsData": {
        "279599": {
         "conversionCount": 7826,
         "convertedVisitCount": 7826,
         "revenueCount": 986076.0,
         "convertedVisitorCount": 0,
         "revenuePerVisit": 5.87,
         "revenuePerVisitor": 0.0,
         "reliability": 100.0,
         "improvementRange": {
          "min": 193.92,
          "max": 229.03,
          "half": 17.56
         },
         "improvementRate": 211.48,
Redesign 2

"828221": {
    "breakdownData": {
     "_reference": {
      "intervalData": {},
      "generalData": {
       "visitCount": 174194,
       "visitorCount": 0,
       "goalsData": {
        "279599": {
         "conversionCount": 1477,
         "convertedVisitCount": 1477,
         "revenueCount": 189056.0,
         "convertedVisitorCount": 0,
         "revenuePerVisit": 1.09,
         "revenuePerVisitor": 0.0,
         "reliability": 100.0,
         "improvementRange": {
          "min": -47.93,
          "max": -38.72,
          "half": 4.6
         },
         "improvementRate": -43.33,

4. Filtrer les résultats d’expérience

Obtenez des résultats spécifiques en utilisant les paramètres breakdown et filter. Le paramètre breakdown organise les données par facteurs tels que les nouveaux visiteurs, le système d’exploitation, le navigateur, le jour de la semaine, le SDK et le fuseau horaire. Par exemple, retournez une ventilation par navigateur uniquement pour les nouveaux visiteurs en incluant le paramètre breakdown défini sur BROWSER et un paramètre filters défini sur NEW_VISITOR, basé sur la procédure de résultats directs. La requête cURL vers l’endpoint Export experiment results devrait apparaître comme suit :

curl -L -X POST 'https://api.kameleoon.com/experiments/188308/results' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'Authorization: Bearer <ACCESS_TOKEN>
' \
--data-raw '{
  "visitorData": true,
  "sequentialTesting": true,
  "breakdown": {
    "type": "BROWSER"
  },
  "referenceVariationId": "0",
  "filters": [
    
    {
        "type":"NEW_VISITOR",
        "visitorsType":"NEW_VISITORS",
        "include":true
    }],
  "goalsIds": [
        279599
  ]
}'
Après avoir reçu le dataCode, envoyez la requête GET suivante :
curl -L -X GET 'https://api.kameleoon.com/results?dataCode=14443931880924098266207585267983330260134079899081739889989435434342588016765'
Une requête réussie renvoie les résultats de l’expérience pour les nouveaux visiteurs utilisant le navigateur Chrome. La réponse suivante est tronquée pour plus de clarté :
>....                                                                                                                                                              
                        }
                    },
                    "OTHERS": {
                        "intervalData": {},
                        "generalData": {
                            "visitCount": 0,
                            "visitorCount": 587206,
                            "goalsData": {
                                "279599": {
                                    "conversionCount": 5410,
                                    "convertedVisitCount": 0,
                                    "revenueCount": 692480.0,
                                    "convertedVisitorCount": 5359,
                                    "revenuePerVisit": 0.0,
                                    "revenuePerVisitor": 1.18,
                                    "reliability": 100.0,
                                    "improvementRange": {
                                        "min": -53.0,
                                        "max": -48.7,
                                        "half": 2.15
                                    },
                                    "improvementRate": -50.85,
                                    "conversionRate": 0.009126269145751235,
                                    "averageCart": 129.22,
                                    "ratioValue": 0.0
                                }
                            }
                        }
                    },
                    "CHROME": {
                        "intervalData": {},
                        "generalData": {
                            "visitCount": 0,
                            "visitorCount": 16,
                            "goalsData": {
                                "279599": {
                                    "conversionCount": 0,
                                    "convertedVisitCount": 0,
                                    "revenueCount": 0.0,
                                    "convertedVisitorCount": 0,
                                    "revenuePerVisit": 0.0,
                                    "revenuePerVisitor": 0.0,
                                    "reliability": 50.0,
                                    "improvementRange": {
                                        "min": null,
                                        "max": null,
                                        "half": null
                                    },
                                    "improvementRate": 0.0,
                                    "averageCart": 0.0,
                                    "ratioValue": 0.0
                                }
                            }
                        }
                    }
                }
            }
        },
        "ventilationNames": null,
        "cupedDataByGoalId": {}
    }
}