Most likely! We'd love to hear your ideas. Please reach out to us any time at firstname.lastname@example.org.
Can Miso recommend UX patterns for implementing a recipe?
Yes! We have tons of experience in what UX patterns are most effective for personalized search and recommendations. Ask your Miso solutions engineer about Bento, our coming-soon UI Kit of best practices and style guides.
What do Miso's results look like for first-time users or visitors who don't have any interactions on the site yet?
Miso will provide results based on all the activity on your site, and then will immediately learn based on the user's first few interactions. (That's why it's important to stream interactions to Miso in real time!) If you want, you can also use the user_cohort parameter to tell Miso to personalize the cold start behavior as if the user belonged to a certain cohort on your site. See the API documentation for more details.
How should I send interaction data to Miso: in bulk or in real-time?
What is your strategy to minimize latency for customers whose hardware is located around the globe?
Can I manually swap out a recommendation or search result?
Absolutely! You can boost, bury, or exclude products, brands, categories, etc. from your recommendations or search results based on pre-defined conditions that are set either programmatically or using Dojo, our no-code UI. For more information, see our Boosting and Pinning recipe.
Can Miso be used headless?
Yes. Most interfacing with Miso is done via REST APIs in your front and back-end clients or our SDK. The initial engine training and certain merchandising tools, such as synonyms, use Dojo, our no-code UI for managing your Miso instance.
Can Miso incorporate negative signals?
Yes. Common examples of negative signals include: removing an item from the cart, requesting a refund, removing an item from a collection, or pressing a 'dislike' button. Also, an event such as a product detail view that has a very low duration may indicate that the item wasn't that relevant to them. For more information on the different types of interactions that Miso supports, please see Importing Interaction Data.
Can Miso use social engagement (likes, comments) in its model?
Yes. Miso can incorporate social feedback such as liking, commenting, sharing, and rating. These are strong signals of user preference and you should send them to Miso if you have them. For more information on the different types of interactions that Miso supports, please see Importing Interaction Data.
Can Miso's engines be trained using limited structured data?
To maximize the meaningfulness of your search and recommendation results, we recommend that you provide as many details as you can about the products or content in your catalog. This includes attributes such as the title, description, brand, and any domain-specific tags. For more information on our product schema, see Importing Product Catalog Data. When neccessary, Miso can also be trained using unstructured data, such as images and videos, to bolster the personalization models.
Can you decouple the Search and Recommendation engines?
Yes. In fact, the Search and Recommendation engines are entirely separate and can be fine-tuned individually.
Can your APIs support asynchronous writes?
Yes. To use asynchronous mode, append ?async=1 to the Product or User Upload APIs.
Do I need to send customers' purchase history to Miso?
During the onboarding phase, we will typically ask for at least 3 months of clickstream data for product detail page views and add to cart events, at minimum. Although not required, if customers' purchase history is ready available, Miso can incorporate it into the initial training. Once the real-time clickstream data feed is set up, Miso will automatically keep track of purchase history and retrain the models accordingly on a given cadence.
Do Miso's personalization engines account for the customer's price sensitivity?
Yes. Price is one of the product attributes that Miso's algorithms consider when modeling product similarity. If a customer usually browses or purchases products in a particular price range, they will be more likely to see products in that price range in the search results or recommendation feed. However, the product's relevancy to the customer is still the primary factor in how items are presented to them.
Does Miso analyze product images?
It's not turned on by default, but it's something that we can do depending on your catalog, use cases, and vertical. If this capability is something you're interested in, reach out to your Miso solutions engineer.
Does Miso know how to personalize for aspects of the product (like the brand) even if I only send events referencing a product_id?
Yes! When users interact with a product, the brand will also receive the same interaction "virtually" during the training. This allows us to do many cool things. For example:
Personalized ranking / recommendations for brands (even if users just interacted with the Products)
Product to Brands recommendations or vice versa.
Does Miso use Lucene, Solr, or Elasticsearch?
No. Miso uses a custom framework for it's search and recommendation engines that utilizes a multi-objective vector embeddings model and is optimized for low latency. However, Miso uses a similar syntax to Lucene, Solr, and Elasticsearch within the API for manipulating the search and recommendation results.
Does my product catalog need to be in English?
No. Miso has the built-in support for English, French, German, Spanish, Italian, Dutch, Russian, Ukrainian, Mandarin (both Simplified and Traditional), Japanese, and Korean. Simply set the primary language for that environment to the appropriate language. Miso will apply the corresponding spellcheck, stemming, and tokenization, to the product catalog automatically.
For a newly registered user, do I need to update their account information in Miso before sending their interaction data?
No. You can send interaction events to Miso without the corresponding user data. Once they have a permanent user_id (if ever), Miso will automatically reconcile their anonymous_id with their user profile.
For products, what exactly are the differences between categories, tags and collections?
There aren't any significant differences between these and how Miso will treat them. It is more of a semantic difference in how the organization thinks about its data internally.
How are different interactions weighed?
In general, interactions that are a stronger signal of user affinity are weighed relatively more. For example, an "add to cart" event is weighed more than a "product detail view" event, and a checkout event is weighed more than both. However, part of our fine-tuning process is making sure that the weights assigned to different interactions make sense for your business.
How do you prevent trapping users in a "filter bubble" where they see over-personalized results?
In our algorithms, we avoid a negative feedback loop by occasionally randomizing our personalized results. In this way, we learn how users react to seeing less personalized results and fine-tune the models accordingly. (This randomization only occurs for a small percentage of results, to prevent an impact on the personalization performance.) Your UX can play a role in this as well. We've found that it's important to keep editorial selections on the site (e.g. on the homepage) or mix editorial selections with algorithmic selections. Recipes like Categories You May Like and Trending For You are also great for letting users explore diverse content.
How can I exclude products in certain categories from appearing in search results or recommendations?
Using the fq parameter in both the Search and Recommendation APIs, you can define conditions for filtering your results based on any attribute, including the product category. For example, you may have a SKU for a gift box that you would not sell on its own and want to exclude from your result set. Such a filter might look like: “Fq” : “NOT(categories:NOT_FOR_SALE)”
How can I filter my results based on inventory level?
To ensure that only in-stock products are searchable or appear in recommendations, you can utilize the availability field in the Search or Recommendation API and filter the results based on its value. For more information on inventory management, please see our Out of Stock Search recipe.
How can I filter NSFW products from appearing in SFW searches?
To prevent NSFW products from appearing in search results unless when explicitly searched for, set a parameter in the Search API called enable_safe_search to true. You will also need to provide your Miso Support Team with a list of product categories that contain NSFW products. For more information, see the Safe Search recipe.
How can I promote new products and/or collections?
All of Miso's APIs support a merchandising technique called boosting. Boosting allows you to promote specific products or collections of products based on pre-defined conditions. You can boost products to the top of the search results page/recommendation feed or pin them to specific positions for a more organic browsing experience.
How can I update my product catalog?
To add a new product record to your catalog or to modify an existing product record, send an HTTP request using the Products API with the product details in the payload. For more information on the Products API and schema requirements, see the API documentation.
How can private label brands be made more discoverable?
Miso supports a merchandising technique called anchoring, which creates associations between similar products so that they appear close together in search and recommendation results. You can anchor a brand-name product to a private-label product to show it as a viable alternative. For more information, see the Anchoring recipe.
What can I do to minimize latency?
Using a smaller rows parameter and fetching the subsequent results with exclude will lower the latency quite a bit. You can also make sure you're only requesting the fields that you need with the fl parameter. You can also call Miso's APIs directly from the users' browser using a user_hash and your publishable API key.
How do I generate paginated recommendations?
For recommendations, we expect the results to change pretty frequently because we analyze users' every click in real-time. This makes it a little tricky to support pagination as a parameter. So to enable a UI pattern like infinite scrolling, we suggest that you use the exclude parameter. You can put every product_id that has been shown on the same page in the exclude field, and then you can then get the next batch of recommendations while ensuring that there are no duplicates.
How do I generate paginated search results?
The Search API easily supports pagination. For the Search API, the results are cached for 10 minutes. During this time, the search results for the (same user + same search query) will not change.
How do I prevent product variants from showing up in the recommended products list?
Having product variants is a very common scenario for e-commerce sites. For example, you may have a t-shirt style that's available in different sizes and colors. As long as these products have the same product_group_id, Miso's recommendation engine can be configured to only show a single variant in the recommendation results or exclude the variants from the recommendation results altogether if one of them is excluded.
How do synonyms work?
Synonyms allow for word substitutions within search queries. For example, a customer searching for "kleenex" is likely interested in facial tissues. Synonyms can be defined in Dojo, our no-code UI for managing your Miso engines.
How does A/B testing work?
A/B testing allows you to test the performance between personalization variants by splitting up your site visitors into control and treatment groups. Miso can automatically assign the treatments to users or you can assign them manually. For more information on A/B testing, see Running Your First A/B Experiment.
How does Miso keep track of time spent on a page?
There are two strategies for capturing time spent on a page:
Send the duration along with the page view interaction right before the user navigates away.\
Send the accumulated duration multiple times. Miso will only take into account the latest
interaction as long as their user_id (or anonymous_id), timestamp, product_ids, and type are the same.
How does semantic search work?
Semantic search uses deep-learning query analysis to understand the intent and context behind a user's search. It's used when there aren't enough keyword matches in the search results page and allows for the query to be expanded to similar words or phrases. For example, searching for "sick" may not result in any keyword matches but semantic search will expand the query to include terms such as "medicine", "pain relief", and "fever". For more information on semantic search, check out our recipe.
How large of a payload can I send to the Interactions API?
For bulk-loading historic interactions, we recommend sending a maximum of 1000 interactions per request. For realtime interactions, we recommend sending them to Miso as soon as they occur so that Miso can further personalize the user experience for the current user.
How much historical clickstream data do I need for getting started in the pilot phase?
The purpose of the pilot phase is to evaluate the overall performance gains of implementing personalization in your production environment and making adjustments to the corresponding engine(s) as needed. For best results, we recommend providing at least 3 months of historical clickstream data during the onboarding process. This helps Miso's engines determine a starting point for understanding your customers' behavior, which is later reinforced with real-time learning.
If I already have merchandizing, will personalization wipe that out?
Definitely not! Merchandising is a great strategy and with Miso you can use personalization to make sure that your campaigns (such as merchandised emails) are reaching exactly the right users. You can also combine the merchandised aspects of your homepage with ribbons that are driven by Miso AI, like Products for You. Note that Miso can save you time from having to hardcode products that go together (e.g. "Complete the Look") by doing this automatically with a recipe like Frequently Bought Together.
If I use my publishable API key to call Miso's APIs from the browser, how do you prevent someone else from impersonating me?
For requests that use your publishable API key, Miso requires an encrypted user_hash, which encrypts the requested user_id (or anonymous_id) with your secret API key using HMAC. Your backend server will need to generate the user_hash, and then let the front-end code send the user_hash to Miso APIs to verify the identity of the API caller.
As long as the Secret API Key is kept secret, the user_hash prevents a malicious attacker from making unauthorized API calls or impersonating any of your users.
If multiple products are simultaneously boosted, what determines the order they will appear in the search results or recommendation feed?
Miso’s Search and Recommendation Engines apply user personalization to determine the order in which to show boosted products. The most relevant boosted products, which are likelier to result in a conversion, are shown first.
If we send Data Upload API requests multiple times, do we have to worry about duplicating records?
Miso will automatically dedupe your data and keep the one that was uploaded later. Re-uploading the same interaction or product multiple times is absolutely fine!
Is my data used to train other companies' models?
No. Your data is only used for training your models. This localized training means that your results will be specific to your customers and product catalog, which we've found to return more relevant results than a generalized approach.
Is my product catalog the right size for personalization to work?
While there's no upper limit to how large your product catalog should be (some of our customers have upwards of 100,000 unique products), we've found that considerable performance gains begin to unlock when you have over 500 unique items in your catalog.
Is pre-processing required of the historical data dump?
In order to expedite the onboarding process, you may need to pre-process your historical data (product catalog and clickstream) to adhere to Miso's schema requirements. This includes structuring the data in JSON format and using standardized field names and typing. Miso also integrates with many popular platforms that won't require you to pre-process the data. See here for a list of available integrations.
Isn't personalization a little creepy?
Yes. Personalization, especially when it's approached the wrong way and without transparency, can absolutely be creepy. However, there are a couple of ways that platforms cross the "creepy line," and we've taken care with Miso to treat this line as sacred, not cross it, and instead unlock real innovations that eliminate any temptation to cross it, because we've found a better way.
Miso says user data is optional. But if I do provide user data, what will it be used for?
We learn the preferences of groups of users with the same attributes and use that to bootstrap the personalization. We never try to derive anything else from this data (e.g. looking into users' geographic location) or use it in any other way. User data is also much less heavily weighted than actual interactions on the site. It typically takes only 5-20 interactions for the effects of the user bootstrapping to fade and be replaced by real-time predictions based on clickstream data.
My site traffic is mostly comprised of anonymous users. Can I still implement personalization?
Yes. This is a very common scenario in e-commerce and media. Miso's personalization engines are pre-trained and use real-time behavioral data (and thus optimized for cold-start). That means that users don't need to sign-in to benefit from personalization, which will start in only a few clicks on your site.
Our product catalog varies across international markets. How can I set up my Miso environment to only capture the interaction data for that market?
For scenarios where it’s pertinent to avoid cross-market impact, Miso will provide a separate environment per market, with multiple language support (if necessary). The additional environment(s) can be managed under a single Dojo workspace.
Sometimes I don't see many results when filtering on a Recommendation API. Why is that?
For optimal latency, Miso recommends from a "candidate set" of precomputed products that are relevant to users' interests. For example, if you are trying to filter for beauty products, and we don't have any clickstream data showing that the use has an interest in the beauty category, beauty products are less likely to be present in the candidate set.
In the case where you absolutely want to show some products regardless of users' interests, using the Search API is a better option because the default ranking will prioritize general relevancy over personalization. See the Category Pages recipe for an example.
What are the best places on a site to apply personalization?
Because of Miso's API-first, microservice approach, you can apply personalization to virtually every customer touchpoint, such as your home page, product detail pages, cart, checkout flow, and even promotional emails. Organizations often start with a Products For You, You May Also Like, or Frequently Bought Together product shelf.
What happens if an API request doesn't get through due to a network issue?
You can check the HTTP return code to see if your request went through. Any return code >= 200 means the upload was successful.
What is the miso_id and how often should I expect it to change?
The miso_id is an auto-generated unique identifier for each recommendation or search result. Maintaining this ID for subsequent page views is important to Miso's performance, as we use miso_id to track and fine-tune the performance of the search and recommendation results. When a user clicks on a result, you should pass the associated miso_id to the next page view, and associate the miso_id with the interactions that take place on the page (e.g. product_detail_page_view, add_to_cart, add_to_collection, like, etc.). This way, Miso will learn which recommendations worked and which didn't.
What is the smallest payload I can send to the Interaction API?
To record a customer interaction, you must send the following fields at minimum: type, user_id, and product_ids. An example of such a payload might look like this:
Additionally, a timestamp is often supplied as well, but if not, Miso will use the server timestamp.
What kind of geo context is most useful to Miso?
For some data, especially related to the purchase of physical goods like groceries, customers may want to send location information. We've had success using the H3 library to convert lat/lon into hexagons with the desired resolutions. For example, a res-7 hexagon represents an area of about 5.161293 KM^2, which can be a good trade-off between precision and sparsity. We've had good results with res-6, res-7, and res-8 so far. When sending Interaction data, you can use the context field to send us geohex information with different resolutions, along with other business-specific info (e.g. region name, city name, fulfillment center, etc.). Example:
What kinds of data integrations do you support? E.g. Segment, Amazon Kinesis, Google Analytics?
We currently support:
You can see which integrations Miso supports under the Integrations tab in Dojo.
We're looking into whether we can commit to integrations with Amazon Kinesis and Google Analytics as well. For now, if you use any of these technologies, please discuss the best options with your Miso solutions engineer. We're here to help and have lots of experience guiding teams through the data upload process.
What makes Miso different from other search & recommendation systems?
There's no minimum threshold of events to personalize. You can start with the data you already have.
Models work in real-time, so new users, visitors, and catalog items will be instantly optimized rather than waiting for a model refresh.
Miso is built on semantic intelligence that understands your catalog, rather than mining data from your users.
It’s not a plug-in, but a flexible platform that lets you tune and optimize your results at a very fine level of detail.
Miso is built for privacy-first personalization that requires no user data.
Miso does n=1 personalization which means we build an individual personalization model for each and every user and each and every item in your catalog, rather than modeling based on categories or personas.
What product metadata does Miso rely on?
Common examples of product metadata that Miso utilizes are: title, description, price, color, brand, material, and more. In general, the more metadata you can provide about your product catalog, the more fine-tuned the personalization results will be. For more information on the product schema, see Importing Product Catalog Data.
What QPS can your APIs handle?
We stress test our API suite with up to 1000 QPS. But give us a note if you plan to have a QPS over 200.
What types of interactions are the most valuable to collect?
For e-commerce sites, the most valuable interactions are product detail page views and add to cart events. For media sites, the most valuable interactions are article views and read/watch events (as measured by time on site or scroll depth). During the initial onboarding phase, we ask that you provide those interactions at minimum in order to make accurate predictions.
What's the best way to deal with bilingual markets (e.g. Canada needs language support for both English and French)?
For bilingual markets, you can set a primary language in the language field and set the secondary language in the i18n field. For the Canadian example:
The French-specific analysis will be applied to anything under i18n_fr , and users will be able to search for this product using either French or English.
Which interaction should I choose to optimize when setting up my engine?
We recommend picking the interactions in the conversion funnel that are most aligned with your top-line business metrics. For eCommerce, it's most likely to be a combination of add_to_cart and checkout. For content media, it can be read or watch in combination with product_detail_page_view.