Abstract:
A computer-implemented method includes generating a first list of products to recommend to a user. The following steps are then repeated: removing a first product from the first list and placing the first product in a second list wherein the order of the products in the second list determines the order that products appear on a user interface; and comparing each remaining product in the first list to the product placed on the second list and moving products that are similar to the product placed on the second list further down in the first list. A user interface is then generated from the second list to show suggested products to a user.

Description:
BACKGROUND 
       [0001]    Online retail shopping involves consumers visiting one or more websites to select and purchase products. Users can sign into accounts on some retail websites allowing them to store their past purchases, commonly used shipping addresses and credit card information. 
         [0002]    Some retail websites make suggestions for other products that a user may like based on products that the user views, places in their shopping cart, or actually purchases. 
         [0003]    The discussion above is merely provided for general background information and is not intended to be used as an aid in determining the scope of the claimed subject matter. The claimed subject matter is not limited to implementations that solve any or all disadvantages noted in the background. 
       SUMMARY 
       [0004]    A computer-implemented method includes generating a first list of products to recommend to a user. The following steps are then repeated: removing a first product from the first list and placing the first product in a second list wherein the order of the products in the second list determines the order that products appear on a user interface; and comparing each remaining product in the first list to the product placed on the second list and moving products that are similar to the product placed on the second list further down in the first list. A user interface is then generated from the second list to show suggested products to a user. 
         [0005]    In a further embodiment, a processor performs steps that include removing a product from a first list of products based on a score for the product, adding the product to a second list of products, and for each product remaining in the first list of products, altering the score of the product based on similarities between the product and the product added to the second list of products. A user interface is generated to display products in the second list of products. 
         [0006]    A system includes a memory a memory containing a first list of products, each product having an associated score and a processor. The processor generates a second list of products from the first list of products by sequentially selecting products from the first list of products to add to the second list of products based in part on a similarity between the product selected from the first list of products and the products in the second list of products. The processor then generates a user interface displaying the products in the second list of products as suggested products for a user. 
         [0007]    This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0008]      FIG. 1  provides a flow diagram for generating a user interface showing recommended products. 
           [0009]      FIG. 2  provides a block diagram of elements used in the method of  FIG. 1 . 
           [0010]      FIG. 3  provides a flow diagram for forming a product vector. 
           [0011]      FIG. 4  provides an example of a web page for a product in accordance with some embodiments. 
           [0012]      FIG. 5  provides a flow diagram for forming a user vector. 
           [0013]      FIG. 6  provides a flow diagram for creating an ordered list of recommended products for a user. 
           [0014]      FIG. 7  provides a flow diagram for resorting products to form a recommended product list. 
           [0015]      FIG. 8  provides an example user interface allowing a user to select a control to request recommendations for the user. 
           [0016]      FIG. 9  provides a user interface showing a list of recommended products provided to a user. 
           [0017]      FIG. 10  provides a block diagram of a computing device that may be used in the several embodiments. 
       
    
    
     DETAILED DESCRIPTION 
       [0018]    In the embodiments described below, a list of recommended products for a user is generated and displayed to the user in a user interface. To generate the list of recommended products, each product is scored based on a combination of a similarity between a product vector for the product and a user vector for a current user, the recency of the product&#39;s launch, and the likelihood that other users who also bought one or more products ‘liked’ by the current user would buy the product. The product vectors for each product are formed by tokenizing web pages for the product and assigning weights to the tokens based on what fields the tokens appear under within the web page. In addition, the product vector includes attributes set by a vendor or a merchant for the product in a database where each attribute is assigned a weight. 
         [0019]    In accordance with some embodiments, the displayed list of products are initially chosen based on the combination of the product vector-user vector similarity, the recency of the product launch, and the likelihood that a person who bought a product ‘liked’ by the user would also buy the listed product. This initial listing is resorted so as to disperse similar items in the recommendation list. In accordance with one embodiment, the products are dispersed based on similarities between their product vectors. 
         [0020]      FIG. 1  provides a flow diagram for generating a user interface showing recommended products for a user and  FIG. 2  provides a block diagram of a system  200  consisting of a client  202  and a server  204  that can be used to perform the method of  FIG. 1  in accordance with some embodiments. 
         [0021]    At step  100  of  FIG. 1 , product vectors are formed by a product vector constructor  206  on server  204 .  FIG. 3  provides a flow diagram for performing step  100 . 
         [0022]    At step  300  of  FIG. 3 , product vector constructor  206  selects a product from product entries  208 . Each product entry of product entries  208  includes web page content  210  for the product, attributes  212  for the product, and a launch date  214  for the product. At step  302 , product vector constructor  206  retrieves the product web page content  210 , also referred to as the product web page. At step  304 , for each field of the web page content  210 , product vector constructor  206  forms tokens from the text in the field. In some embodiments, the text tokens are single words or terms found in each field. Product vector constructor  206  also applies a field weight to each token, where the field weight is selected from field weights  216 , which provide a separate weight for each field in web page content  210 . 
         [0023]      FIG. 4  provides an example of a web page  400  showing different fields including a title field  402  and a bullet point field  404 . The view of web page  400  also includes a user review tab  406  that provides access to an additional user review field that is hidden in the view shown in  FIG. 4 . The web page content for web page  400  includes text and images that are shown in the view of  FIG. 4  as well as the text and images that are hidden in the view of  FIG. 4  but that can be accessed using one or more controls on web page  400  such as tab  406 . In accordance with one embodiment, fields that are more specific or unique to a particular product are provided with a higher or larger weight than fields that are more generic and thus apply to several products. For example, in web page  400 , the text tokens in title field  402  are given a greater weight than the tokens in bullet point field  404  or the tokens in the user review fields accessed through tab  406 . 
         [0024]    At step  306 , for each token on the web page, the weights assigned to the token from the different fields the token appears in are summed to form a total weight for the token. Thus, if a token appears in several fields, the weights for each field are summed to form a total weight for the token. In accordance with some embodiments, if a token appears several times within a same field, it is only provided with the weight of the field once. 
         [0025]    At step  308 , each of the token weights is multiplied by a common token discount  207  to produce a final weight for the token. Common token discount  207  is specific to each token and reduces the final weight of tokens that are common in the language such as prepositions, articles and common verbs such that common words are weighted less than uncommon words. 
         [0026]    At step  310 , product vector constructor  206  retrieves attributes  212  from product entries  208  for the product. Product vector constructor  206  then retrieves the weights for the attributes of the product from attribute weights  218 . Attributes for the products can include things such as colors, sizes, brands, price, genre and so forth. The attributes  212  for the product and the attribute weights  218  can be set by the retail merchant or by the producer or vendor of the product. Attributes  212  are stored separately from web page content  210 . 
         [0027]    At step  312 , the web page tokens and the attributes along with their weights are used to form a product vector  220  that will be stored in the product entry  208  for the product. In accordance with one embodiment, each unique web page token and each attribute form a separate dimension of the product vector. In addition, the web page token dimensions are weighted by the final weight determined at step  308  for the web page token and the attribute dimensions are weighted by the attribute weights. Once the product vector is constructed, it is stored as product vector  220  in product entries  208  for the product. 
         [0028]    At step  314 , product vector constructor  206  determines if there are more products. If there are more products, product vector constructor  206  returns to step  300  and selects a new product. Steps  302 - 312  are then repeated for the new product. When there are no more products at step  314 , the process ends at step  316 . The process of  FIG. 3  results in a separate product vector for each of a plurality of products available on the retail site. 
         [0029]    Returning to  FIG. 1 , after the product vectors have been formed at step  100 , a “like” control module  224  in server  204  receives an indication that a user has selected a “like” control on a web page to convey that they like a product. For example, in  FIG. 4 , web page  400  includes a like control  408  that when selected by the user causes an identifier for the product to be sent to “like” control module  224 , which stores the product identifier as a liked product  226  in user records  228  for the user. In accordance with one embodiment, the indication that a user has “liked” a product or item is received without receiving an indication that the user purchased the product or item. 
         [0030]    At step  104 , a user vector constructor  230  creates or updates a user vector based on the received indication that the user liked a product.  FIG. 5  provides a flow diagram of a method for creating or updating a user vector at step  104 . 
         [0031]    In step  500  of  FIG. 5 , user vector constructor  230  receives credentials of the user such as a user ID if the credentials had not been previously received. The user&#39;s credentials are used to search user records  228  to find a user record that contains user credentials  232  that match the provided user credentials. At step  502 , user vector constructor  230  retrieves a user vector  234  from the user record  228  if a user vector was previously constructed for the user. At step  504 , user vector constructor  230  retrieves the product vector  220  of the product liked by the user. At step  506 , user vector constructor  230  averages the product vector retrieved at step  504  with the current user vector  234  to form a new or updated user vector. If there was no previous user vector  234 , the retrieved product vector is set as the user vector. At step  508 , the created or updated user vector is stored back to user records  228  as user vector  234 . 
         [0032]    Returning to  FIG. 1 , after the user vector is created or updated, a list of recommended products for the user is created or updated at step  106  by a product suggestor  236 . 
         [0033]      FIG. 6  provides a flow diagram for creating a suggested product list for a user. At step  600 , a reverse index searcher  238  performs a search of a product reverse index  240  to identify all of the product vectors that contain at least one dimension of the user vector such as one of the tokens or attributes in the user vector. In other words, the search of product reverse index  240  is performed to locate all product vectors that have at least one dimension in common with the user vector. At step  602 , the product vectors identified in step  600  are compared to user vector  234  by a vector comparator  242  of product suggestor  236 . In accordance with one embodiment, this comparison involves a cosine similarity comparison. The comparison of step  602  generates a similarity score for each product vector based on the similarity between the user vector and the product vector. 
         [0034]    At step  604 , a subset of product vectors, such as the top k product vectors, based on similarity scores are selected where k is from  2 - 50  in accordance with some embodiments. In selecting the top k product vectors, product suggestor  236  is ensuring that the similarity score for the selected products is sufficiently high to warrant determining a recency score and a collaborative filter score for the product vector as determined below. By limiting the calculation of the recency score and collaborative filter score to only the top k product vectors, these embodiments improve the operation of the server by reducing the number of operations that the server must perform. 
         [0035]    At step  606 , a recency decay function is applied to the similarity scores to alter the similarity scores so that scores for products that are more recently launched are increased relative to scores for products that were launched less recently. In particular, for each product of the top k products, a launch date  214  for the product is retrieved from product entries  208  by recency decay scorer  244 , which also receives the similarity scores for the k products. The launch date represent the date a product was made available to consumers at a retailer. Recency decay scorer  244  uses the launch dates to determine a recency score for each product then combines the recency score with the similarity score to form a new score for the top k products. 
         [0036]    At step  608 , a collaborative filter score  246  in product suggestor  236  determines a collaborative filtering score for each of the k products. In accordance with one embodiment, the collaborative filtering score for a product is based on the likelihood that other consumers who bought a product liked by the current user would also buy the current product. In particular, an association matrix builder  250  examines lists of bought products  252  of all the users in user records  228  and identifies a category association matrix that indicates the relative likelihood of a user buying one category of products if they have bought a product in another category of products. Collaborative filter score  246  uses the category association matrix produced by association matrix builder  250  and the list of products liked  226  by the user to provide a likelihood score for each of the k products that indicates the likelihood that other users would buy a product or item from this product&#39;s category given the category of a product or item liked by the current user. In accordance with one embodiment, each product will receive a separate collaborative filtering score for each product liked by the user and these separate collaborative scores will be combined to form a single collaborative filter score for each of the k products. 
         [0037]    At step  610 , product suggestor  236  combines the similarity score, the recency score and the collaborative filter score to form a final product score or total score for each of the k products. In one embodiment, combining the scores involves adding the similarity score, the recency score and the collaborative filter score together. 
         [0038]    At step  612 , the final product scores are used to form a first list of products to display on the recommendation web page. In accordance with some embodiments, the first list of products is viewed as an ordered list of products with the product with the highest final product score at the top, referred to as the top product, and the product with the lowest final product score at the bottom. 
         [0039]    At step  614 , the products in the first list are rescored to disperse similar items to form the final product recommendation list  262 , which is also referred to as a second list. The method of step  614  is shown in the flow diagram of  FIG. 7 . 
         [0040]    At step  702 , the product with the highest score in the first list, the top product, is selected as the next product to add to ordered product recommendation list  262  by a resorter  260 . If there is no ordered product recommendation list  262  yet, the selected product is inserted as the first product in ordered product recommendation list  262 . When the product is added to product recommendation list  262  it is added to the end of product recommendation list  262  so that the order the products are added to product recommendation list  262  is maintained with product recommendation list  262 . At step  704 , the product added to product recommendation list  262  is removed from the first list. 
         [0041]    At step  706 , resorter  260  determines if more products are needed for product recommendation list  262 . If more products are needed, resorter  260  updates or alters the scores of the products remaining in the first list at step  708  by reducing the scores of products based on the similarity of the product vectors of each product to the product vector of the last product added to product recommendation list  262 . Thus, if a product in the first list has a product vector that is similar to the product vector of the product last added to product recommendation list  262 , its score is reduced more than the score for a product that has a product vector that is not as similar to the product vector of the last product added to product recommendation list  262 . In accordance with one embodiment, a similarity score is determined using a cosine function and the similarity score is subtracted from the previous score for the product to form the altered score for the product. Viewing the first list as an ordered list with the highest scoring product at the top of the list, altering the scores of the products in the first list based on the similarities between the products and the last product added to product recommendation list  262  causes products that are similar to the last product placed on product recommendation list  262  to move further down in the first list. 
         [0042]    After step  708 , the process returns to step  702  where the product in the first list with the highest altered score is selected as the next product to add to product recommendation list  262 . Steps  702 ,  704 ,  706  and  708  are repeated until no more products are needed to be added to product recommendation list  262 . For example, in some embodiments, the number of products that can be displayed is limited such that when the limit is reached, no further products need to be added to product recommendation list  262 . When no more products are needed to be added to product recommendation list  262  at step  706 , resorter  260  stores product recommendation list  262  in user records  228  at step  710 . 
         [0043]    Returning to  FIG. 1 , after resorter  260  has created product recommendation list  262  at step  106 , the process of  FIG. 1  splits in parallel to steps  102  and step  108 . In step  102 , the process waits to receive an indication that the user has liked another product and in step  108 , the process waits to receive a request for recommendations from the user. 
         [0044]      FIG. 8  provides an example of a user interface  800  displayed on client device  202 , such as a display of a computing device or a mobile device. User interface  800  includes a product suggestion request control  804  that allows a user to request “top picks for you”. When a user selects control  804 , client device  202  sends a request to product suggestion control module  270  on server  204  to request product recommendations for the current user. 
         [0045]    Upon receiving this request at step  108 , product suggestion control module  270  accesses product recommendation list  262  for the current user and uses the product recommendation list  262  to generate a suggested product user interface  272  at step  110 . In particular, the order of the products in product recommendation list  262  is used to set or select the position of the products in user interface  272  such that products higher in product recommendation list  262  are displayed closer to the top of user interface  272 . Since the product&#39;s position in product recommendation list  262  is based in part on the final product score or total score, the position of the product in the user interface is selected based in part on the final product score or total score. 
         [0046]      FIG. 9  provides an example of a user interface  900  on a display  902 , which for example can be a display on a computing device or a mobile device. User interface  900  includes an ordered list of suggested products for the current user, such as products  904 ,  906 ,  908 ,  910 ,  912  and  914 . In accordance with the embodiment shown in  FIG. 9 , the user interface can display pictures of the product as well as one or more controls related to the product, such as a control  916  to add the product to the user&#39;s current shopping cart, a pre-order control, such as control  918  to allow a user to place an order for a product that is not yet available and a shop brand controls, such as control  920  to allow the user to shop for all products in a brand. The shop brand control  920  is made available when the product listed is for an entire brand instead of for a single product within the brand. Products  904 ,  906  and  908  are positioned higher in product recommendation list  262  than products  910 ,  912  and  914 . 
         [0047]      FIG. 10  provides an example of a computing device  10  that can be used as a server device in the embodiments above. Computing device  10  includes a processing unit  12 , a system memory  14  and a system bus  16  that couples the system memory  14  to the processing unit  12 . System memory  14  includes read only memory (ROM)  18  and random access memory (RAM)  20 . A basic input/output system  22  (BIOS), containing the basic routines that help to transfer information between elements within the computing device  10 , is stored in ROM  18 . Computer-executable instructions that are to be executed by processing unit  12  may be stored in random access memory  20  before being executed. 
         [0048]    Embodiments of the present invention can be applied in the context of computer systems other than computing device  10 . Other appropriate computer systems include handheld devices, multi-processor systems, various consumer electronic devices, mainframe computers, and the like. Those skilled in the art will also appreciate that embodiments can also be applied within computer systems wherein tasks are performed by remote processing devices that are linked through a communications network (e.g., communication utilizing Internet or web-based software systems). For example, program modules may be located in either local or remote memory storage devices or simultaneously in both local and remote memory storage devices. Similarly, any storage of data associated with embodiments of the present invention may be accomplished utilizing either local or remote storage devices, or simultaneously utilizing both local and remote storage devices. 
         [0049]    Computing device  10  further includes a hard disc drive  24 , an external memory device  28 , and an optical disc drive  30 . External memory device  28  can include an external disc drive or solid state memory that may be attached to computing device  10  through an interface such as Universal Serial Bus interface  34 , which is connected to system bus  16 . Optical disc drive  30  can illustratively be utilized for reading data from (or writing data to) optical media, such as a CD-ROM disc  32 . Hard disc drive  24  and optical disc drive  30  are connected to the system bus  16  by a hard disc drive interface  32  and an optical disc drive interface  36 , respectively. The drives and external memory devices and their associated computer-readable media provide nonvolatile storage media for the computing device  10  on which computer-executable instructions and computer-readable data structures may be stored. Other types of media that are readable by a computer may also be used in the exemplary operation environment. 
         [0050]    A number of program modules may be stored in the drives and RAM  20 , including an operating system  38 , one or more application programs  40 , other program modules  42  and program data  44 . In particular, application programs  40  can include programs for implementing product suggestor  236 , product vector constructor  206 , user vector constructor  230 , “like” control module  224 , product suggestion control module  270  and association matrix builder  250  Program data  44  may include data such as product entries  208 , user records  228 , suggested products user interface  272 . 
         [0051]    Processing unit  12 , also referred to as a processor, executes programs in system memory  14  and solid state memory  25  to perform the methods described above. 
         [0052]    Input devices including a keyboard  63  and a mouse  65  are connected to system bus  16  through an Input/Output interface  46  that is coupled to system bus  16 . Monitor  48  is connected to the system bus  16  through a video adapter  50  and provides graphical images to users. Other peripheral output devices (e.g., speakers or printers) could also be included but have not been illustrated. In accordance with some embodiments, monitor  48  comprises a touch screen that both displays input and provides locations on the screen where the user is contacting the screen. 
         [0053]    The computing device  10  may operate in a network environment utilizing connections to one or more remote computers, such as a remote computer  52 . The remote computer  52  may be a server, a router, a peer device, or other common network node. Remote computer  52  may include many or all of the features and elements described in relation to computing device  10 , although only a memory storage device  54  has been illustrated in  FIG. 10 . The network connections depicted in  FIG. 10  include a local area network (LAN)  56  and a wide area network (WAN)  58 . Such network environments are commonplace in the art. 
         [0054]    The computing device  10  is connected to the LAN  56  through a network interface  60 . The computing device  10  is also connected to WAN  58  and includes a modem  62  for establishing communications over the WAN  58 . The modem  62 , which may be internal or external, is connected to the system bus  16  via the I/O interface  46 . Order  206  is received through either network interface  60  or modem  62 . 
         [0055]    In a networked environment, program modules depicted relative to the computing device  10 , or portions thereof, may be stored in the remote memory storage device  54 . For example, application programs may be stored utilizing memory storage device  54 . In addition, data associated with an application program may illustratively be stored within memory storage device  54 . It will be appreciated that the network connections shown in  FIG. 10  are exemplary and other means for establishing a communications link between the computers, such as a wireless interface communications link, may be used. 
         [0056]    Although elements have been shown or described as separate embodiments above, portions of each embodiment may be combined with all or part of other embodiments described above. 
         [0057]    Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms for implementing the claims.