How to limit possible arm recommendations to a subset of items? - vowpalwabbit

I have the following scenario:
There is a universe of items to recommend [i1....iN] where N is quite large (say 1 million).
There are categories [c1...cK]. Each category consists of a subset of the items.
The user can go to pages which display items from a given category.
I would like to display recommended items for each category page to a user using a single bandits model across all category pages. So when I ask for a set of top-K recommendations ("actions") for category page ci, the results should be limited to the set of items available within ci.
Is there a way to do this with Vowpal Wabbit?

When you ask VW for a contextual bandit prediction using the ADF (action dependent features) form allows you to specify which actions can be chosen on for that prediction. The ADF form can be read about more here, and contrasted with the more common standard contextual bandit. This would allow you only ask for predictions of actions in the category you're currently looking at. This works because actions are defined as the set of the features that compose them, and so you can present any set of features per action for each prediction. This means that changing the actions between calls is not an issue.
However, empirically we see using contextual bandits with > ~100 actions to not be very effective. Essentially the very small exploration probabilities does not work well with the update rule.
So, it's doable but I am not sure how effective it will be.
In a situation such as this a common approach is to use another model to get a pool of recommendations and then use a contextual bandit as an L2 ranker to personalize a pool of 50 or so actions that were suggested.

Related

Annotation specs - AutoML (VertexAi)

We're trying to build an imaged based product search for our webshop using the vertex ai image classification model (single label).
Currently we have around 20k products with xx images per product.
So our dataset containing 20k of labels (one for each product - product number), but on import we receive the following error message:
There are too many AnnotationSpecs in the dataset. Up to 5000 AnnotationSpecs are allowed in one Dataset. Check your csv/jsonl format with our public documentation.
Looks like not more than 5000 labels are allowed per Dataset... This quota is not really visible in the documentation - or we didn't find it.
Anyway, any ideas how we can make it work? Does we have to build 5 Datasets with 5 different Endpoints and than query every Enpoint for matching?
You can find those limits in the AutoML quotas and limits documentation.
It is possible to have multiple models for group of products -- Maybe even something like: one initial model to classify the product category (jewery, watches, shoes, toys, etc) and a second step for a specific model (to identify the specific product belong toys, or belong shoes, etc). But to be honest, it seems a bit hard to support - but certainly worth trying.
A second option would be training a custom model where you could do a fine tuning on some larger model (ie. inception, resnet, etc) do know all your 20k+ classes (products). It could add a little bit more work at first, but after established, it will become a single model for inference and re-training would be simpler using MLOps mechanisms (ie. Vertex Pipelines).

Show simple product with all possible attribute combinations based on configurable product

I have an e-commerce site that provides made-to-order clothing. I've created a configurable product and just one associated product.
Is it possible to display all of the possible attribute combinations within just one associated product rather than manually add every combination?
I've tried allowing out of stock products to be displayed, but this didn't show all of the possible combinations.
I'm not hugely experienced with Magento, but I've used many CMS systems and inventory management products. I've never once seen a matrix / configurable / multi-variation / whatever you want to call it setup where you didn't have to create each combination as a distinct SKU. I'm not saying it's 100% impossible, but I'd view it as extremely unlikely and probably a waste of time to pursue.
Why not just create your configurable products and their sub SKUs via CSV import? It will be far easier and faster than creating them one at a time. Creating every combination will also be extremely easy. If you're not comfortable with Excel, you need to correct that yesterday if you want to be good at product management.
See this article:
https://www.siteground.com/tutorials/magento/import-products.htm

Tree Grid Rally Portfolio Manager to Total Task Actuals on Story, Feature, Iniative and Theme Level

I was using the Rally Tree Grid app found here:
https://github.com/Echo3ToEcho7/RallyTreeGrid
I was able to add the task time spent and task actuals column for my task, but i have been unable to get the sum of theses items to roll up to the user story, feature, initiative or theme level in this view. Would anyone be able to assist thanks?
Per WS API object model TaskEstimateTotal, TaskRemainingTotal, TaskActualTotal exist on UserStories (HierarchicalRequirement). Those fileds do not exist on Tasks. Tasks have Estimate and Actuals attributes. I assume when you say "TaskActualTotal populate on the tasks" you mean Estimate or Actuals populates on the tasks.
There is no attribute on PortfolioItem object in WS API object model where tasks esimates rollup to PI, or where TaskEstimateTotal, TaskRemainingTotal, TaskActualTotal of the associated user stories rollup to PI.
It is possible keep a count of TaskActualTotal values on stories and sum them up in your javascript code, but there is no shortcut, and that works with Rally.data.custom.Store.
PI object has a LeafStoryPlanEstimateTotal attribute which is a sum of the plan estimates of all leaf user stories (stories without children) associated with this Portfolio Item.
I've been trying to get similar data (cost of porfolio items in terms of task estimates and timespent from timesheet), but it seems that there is no easy way.
even though i can get custom reports for tasks, timespent from timespeet, user stories etc, There isn't a custom report capability to get portfolio information.
I've created and Idea / Feature request for something that does this or atleast makes it possible, Feel free to vote it up to get visibility on it to the Rally team
https://ideas.rallydev.com/ideas/D3120

Categorizing product data model

I'm about to rebuild an e commerce website with a mid sized database of about 40,000 product.
One of the main reasons we are putting the old system to retire is the categorization mechanism.
We are looking for something that will allow us to place an item under multiple categories, or even better having no fixed category at all and we can classify products by putting descriptive labels on them and the front user can search for the products by using these labels. (I don't even sure that this can be done from a programming point of view).
It will be helpful to know what this model is called, whether it was implemented before? and even better if you can refer me to ready solutions.

250000 Grouped products in Magento

I've started working on a new Magento webshop which has roughly 250000 different products. Each product can have different conditions (new, used, damaged, etc., each with their own price.). Magento doesn't seem to have a method to implement this at the moment. Of those 250000 products, there are about 150000 different conditions in stock and another 150000 conditions which aren't in stock but do have a price (which can be put on the wishlist).
Some numbers: 1500 categories, drop down attributes (country) with > 300 options, integer attributes (year). Starting with two websites 6 languages each.
I've thought out two solutions to solve this problem:
Grouped / Simple product structure
We create a grouped product which is the container product, each condition will be a different simple product. We'll relate these products to the grouped product.
The nice thing about this solution is that is pretty easy to implement, we'll have to import the data in the correct way and all the information is exactly presented in the way we want.
New Product type
We create a new product type which can have multiple conditions, each with their own inventory. On checkout the inventory is substracted. The problem with this is that implementing the CatalogInventory model in this way probably is difficult and building a whole product type is time consuming and bugprone in general.
The advantage of this solution is this that there will be about 2-2.5x times less products in the system.
Others
Are there any other options to solve this? Maybe there is a module that does all this?
In conclusion: Of course I prefer the first solution but can Magento handle that? Does anyone have experience with this much Grouped Products? The system will have about 550000 products (grouped + simple) products in the system, what will be the performance implications of this? What happens when the site grows and we'll have twice the amount of products?
Without knowing more details I'd lean towards using a new product type or just adding the feature independently of product types if you have a use for configurable products (I definitely wouldn't try to duplicate the configurable product type). I'd disable inventory management and use some additional tables which hold individual item inventory with the per-item conditions and maintain a separate inventory that way. Use events and overrides to control the CatalogInventory stock status as needed. Creating new products constantly which are largely duplicates seems like a hassle worth avoiding if this is a long-term endeavor that needs to scale.
However, the Grouped/Simple method might be a viable short-term solution and appropriate if the project is in it's early stages and can't afford a huge initial expenditure. If well-planned, a script should be able to convert all of the old grouped/simple products into your new product type when ready to launch.

Resources