[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-07-25 (世界標準時間)。"],[],[],null,["\u003cbr /\u003e\n\nPersonalization uses machine learning---specifically a\ncontextual multi-armed bandit algorithm---to\ndetermine the optimal experience for individual users to achieve an objective.\nIn our case, the objective is to optimize for the total number or the total\nparameter value of specific Google Analytics events.\n\nWhat's a contextual multi-armed bandit algorithm?\n\nThe \"multi-armed bandit\" is a metaphor used to describe the situation where we\nwant to continually choose a path that leads to the highest, most reliable\nrewards from a list of multiple paths. To visualize this, you can use the\nmetaphor of a gambler in front of a row of slot machines--often colloquially\nreferred to as a \"one-armed bandit\" because a slot machine has one handle (or\narm) and takes your money. Since we want to solve for multiple\n\"arms,\" the one-armed bandit becomes the *multi-armed* bandit.\n\nFor example, say we have three options and we want to determine which provides\nthe most reliable reward: We could try each option, and then, after receiving a\nresult, we could just keep choosing the arm that yielded the most rewards. This\nis what's referred to as a *greedy* algorithm: the option that yields the best\nresult when we first attempt it is the one we'll continue to choose. But we can\nunderstand that this might not always work---for one thing, the high reward\ncould be a fluke. Or maybe there's some user-specific context that resulted in\nhigher rewards during that time period that wouldn't be as effective later.\n\nSo *context* is added to make the algorithm more effective. For\nRemote Config personalization, this initial context is random sampling,\nor *uncertainty* , that provides some entropy to the experiment. This implements\na \"*contextual* multi-armed bandit.\" As the experiment continues to run,\nongoing exploration and observation adds real learned context about which arms\nare most likely to elicit a reward to the model, making it more effective.\n\nWhat does this mean for my app?\n\nNow, let's discuss what a multi-armed bandit algorithm means in the context of\nyour app. Let's say you're optimizing for banner ad clicks. In this case, the\n\"arms\" of the personalization would be the *alternative values* you specify to\nrepresent the different banner ads you want to display to users. The banner ad\nclick is the reward, which we refer to as an *objective*.\n| **Key Term:** **Alternative values** may also sometimes be referred to as *variants*.\n\nWhen you first launch a personalization, the model does not know which\nalternative value will be more likely to achieve your goal for each individual\nuser. As the personalization explores each alternative value to understand the\nlikelihood of achieving your objective, the underlying model grows more\ninformed, improving its ability to predict and select the optimum experience for\neach user.\n\nPersonalization uses a *stickiness window* of 24 hours. This is the amount of\ntime the personalization algorithm explores a single alternative value. You\nshould provide your personalizations enough time to explore each alternative\nvalue multiple times (generally about 14 days). Ideally, you can let them run\nperpetually so that they can continually improve and adapt as your app and user\nbehaviors change.\n| **Note:** Multiple personalizations are supported, but each personalization learns the optimum values for each user independently.\n\nTrack additional metrics\n\nRemote Config personalization also provides the ability to track up to two\nadditional metrics, to help you contextualize your results. Let's say you've\ndeveloped a social app and have set different alternative values to encourage\nusers to share content with friends to increase overall engagement.\n\nIn this case, you might choose to optimize for an Analytics event like\n`link_received` and set your two metrics to `user_engagement` and\n`link_opened` to understand whether user engagement and the number of links the\nuser opens rises (true engagement) or falls (possibly too many spammy links).\n\nWhile these additional metrics won't be factored into the personalization\nalgorithm, you can track them right alongside your personalization results,\nproviding valuable insight into the personalization's ability to achieve your\noverall goals.\n\nUnderstand personalization results\n\nAfter a personalization has been running for long enough to gather data, you can\nview its results.\n\nTo view personalization results:\n\n1. Open the [Remote Config page](//console.firebase.google.com/project/_/config)\n and click\n [Personalizations](//console.firebase.google.com/project/_/config/personalizations).\n\n2. Select the personalization you want to view. You can search for the\n specific personalization by name or objective, and can sort by Name,\n Start time, or Total lift.\n\nThe results page summarizes the **Total lift** , or percentage difference in\nperformance, that the personalization provides over the **Baseline** group.\n| **Key Term:** The **baseline group** consists of about 20% of the number of users included in the personalized group. Its results are scaled up to provide an accurate comparison. Each user in the baseline group receives one of the values in the personalization, which never changes throughout the lifetime of the personalization.\n\nThe results page also shows the current status of the personalization, the\nattributes of the personalization, and an interactive graph that:\n\n- Shows a detailed daily and total view of how the personalization performed\n against the baseline.\n\n- Shows how each value performs overall across the baseline group.\n\n- Displays goal outcomes and performance against the additional metrics you\n chose, accessible using the tabs at the top of the summary.\n\nA personalization can be left running indefinitely and you can continue to\nrevisit the results page to monitor its performance. The algorithm will continue\nto learn and adjust, so that it can adapt when user behavior changes.\n| **Tip:** If a personalization does not have positive results after 14 days, the most likely reason is that the different alternatives do not produce substantially different results. In this case, you can end the personalization and choose any alternative.\n\nUnderstand personalization deletion\n\nYou can delete a personalization using the Firebase console or by removing a\npersonalization parameter from your template using the\n[Firebase Remote Config API](/docs/remote-config/automate-rc#update_the_remote_config_template).\nDeleted personalizations cannot be restored. To learn about data retention, see\n[Data deletion](/terms/data-processing-terms#6.-data-deletion).\n\nYou can also delete personalizations by [rolling\nback](/docs/remote-config/templates#rollback) or [importing a\ntemplate](/docs/remote-config/templates#download_and_publish_templates).\n\nRollbacks\n\nIf your current template has personalizations and you [roll\nback](/docs/remote-config/templates#rollback) to a template that does not have\nthe same personalizations, the personalizations are deleted. To revert to a\nprevious template, use the Firebase console or\n[`roll back`](/docs/reference/remote-config/rest#rest-resource:-v1.projects.remoteconfig)\nusing the Firebase Remote Config API.\n\nWhen you delete a personalization and roll back to a previous template, a\nreference to that invalid personalization appears in the Firebase console.\nYou can remove the invalid personalization from the\n[Firebase console](//console.firebase.google.com//project/_/config) by editing the\npersonalization in the Parameters tab of the Remote Config page.\n\nImports\n\nImporting a template that no longer contains your current personalizations also\ndeletes those personalizations. To import a template,\n[use the Firebase console](/docs/remote-config/templates#download_and_publish_templates)\nor use the\n[Remote Config REST API](/docs/remote-config/automate-rc#update_the_remote_config_template).\n\nNext steps\n\n- Explore Remote Config personalization\n [use cases](/docs/remote-config/personalization/use-cases).\n\n- [Get started](/docs/remote-config/personalization/get-started) with\n Remote Config personalization."]]