Abstract:
Methods, apparatus, and computer-readable medium can disambiguate point-of-sale data. One method receives one or more measured values. Each measured value indicating a quantity of sales allocated to a respective individual item. The method also receives an unallocated value indicating a quantity of sales allocated to an undifferentiated grouping of a plurality of the individual items. The method calculates, for each individual item of the plurality of the individual items associated with the undifferentiated grouping, a fraction of the undifferentiated grouping attributable to the respective individual item, and estimates a total sales value for at least one of the plurality of the individual items, based at least in part upon a respective measured value and a respective fraction of the undifferentiated grouping attributable to the respective individual item.

Description:
CROSS-REFERENCE TO RELATED APPLICATION 
       [0001]    This application is a continuation of, and claims priority under 35 U.S.C. §120 to application Ser. No. 11/616,700 entitled “DISAMBIGUATING POINT-OF-SALE DATA THROUGH ITEM INDEXING”, filed on Dec. 27, 2006, now issued as U.S. Pat. No. ______, which is a continuation of, and claims the priority benefit, under 35 U.S.C. §120, of U.S. application Ser. No. 10/434,795, entitled “DISAMBIGUATING POINT-OF-SALE DATA THROUGH ITEM INDEXING” filed on May 9, 2003, now issued as U.S. Pat. No. 7,292,991. The subject matter of these earlier filed applications are hereby incorporated by reference. 
     
    
     TECHNICAL FIELD 
       [0002]    The present invention relates generally to the fields of demand forecasting and production planning. More specifically, the present invention relates to techniques for increasing forecast accuracy by disambiguating point-of-sale data. 
       BACKGROUND OF THE INVENTION 
       [0003]    Demand forecasting is an essential component of production planning. Nowhere is this statement more true than in the perishable food industry. Bakeries, delis, doughnut shops, supermarkets, and the like, must accurately predict customer demand in order to produce the right amount of goods to be sold each day. Forecasts that are too high typically result in wasted goods. Forecasts that are too low often result in lost sales and customer annoyance. 
         [0004]    Various software programs, such as Fresh Market Manager™ (FMM), available from Park City Group, Inc., have addressed the need for demand forecasting. The FMM forecasting engine predicts how many of a given item is required each day based on historical point-of-sale data, adjusted for influences such as holidays, weather, seasons, and competitor activity. 
         [0005]    Unfortunately, the forecasts produced by these software programs are only as accurate as the data provided to them. One difficulty in obtaining accurate data is due to the fact that the sale of certain items can be recorded in different ways by a point-of-sale device (e.g., cash register). For example, certain individual items, such as chocolate chip cookies, can be “rung up” as miscellaneous or variety items, e.g., “cookies” or “miscellaneous bakery.” However, the forecasting engine does not need to forecast how many miscellaneous bakery items are needed in a given day. Rather, it must determine how many chocolate chip cookies will be required to satisfy customer demand. 
         [0006]    Point-of-sale data that include both individual item sales and undifferentiated, miscellaneous or variety item sales are ambiguous and typically result in inaccurate forecasts. Accordingly, a need exists for a technique for disambiguating point-of-sale data to enhance forecasting accuracy. 
       SUMMARY OF THE INVENTION 
       [0007]    A point-of-sale interface receives sales quantities for a number of individual items from a point-of-sale feed. The point-of-sale interface also receives sales quantities for a miscellaneous group item that includes undifferentiated sales of one or more of the individual items. Optionally, the point-of-sale interface excludes sales marked as special orders from the sales quantities. 
         [0008]    An item indexer calculates an item index for each individual item comprising a fraction of the miscellaneous group item sales attributable to the individual item. In one embodiment, the item index is calculated by determining a quantity of the individual item produced but not accounted for in the sales for the individual item and any non-point-of-sale transfers (e.g., invoice orders, shrink/waste), and dividing the quantity of the individual item produced but not accounted for by a sum of all of the individual items produced but not accounted for in the sales for the individual items and any non-point-of-sale transfers. 
         [0009]    A sales disambiguator computes a revised sales quantity for each individual item using the item index and the sales for the miscellaneous group item and the individual item. In one embodiment, the revised sales quantity is calculated by adding the original sales quantity for the individual item to a product of the item index for the individual item and the point-of-sale quantity for the miscellaneous group item. 
         [0010]    The sales disambiguator provides the revised sales quantities for the Individual items to a forecasting system, resulting in a more accurate forecast than can be had by relying on the original sales quantities. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0011]      FIG. 1  is a block diagram of a conventional system for forecasting and production planning; 
           [0012]      FIG. 2  is a block diagram of a point-of-sale (POS) feed; 
           [0013]      FIG. 3  is a block diagram of a forecasting and production planning system according to an embodiment of the invention; 
           [0014]      FIG. 4  is a block diagram of a POS interface; 
           [0015]      FIG. 5  is a block diagram of an item indexer. 
           [0016]      FIG. 6  is a dataflow diagram showing the creation of item indices; 
           [0017]      FIG. 7  is a dataflow diagram showing the creation of disambiguated sales quantities based on the item indices; 
           [0018]      FIG. 8  is a table comparing disambiguated sales quantities with estimated quantities using a conventional approach; and 
           [0019]      FIG. 9  is a flowchart of a method for disambiguating point-of-sale data to increase forecasting accuracy. 
       
    
    
     DETAILED DESCRIPTION 
       [0020]    Reference is now made to the figures in which like reference numerals refer to like elements. For clarity, the first digit of a reference numeral indicates the figure number in which the corresponding element is first used. 
         [0021]    In the following description, numerous specific details of programming, software modules, user selections, network transactions, database queries, database structures, etc., are provided for a thorough understanding of the embodiments of the invention. However, those skilled in the art will recognize that the invention can be practiced without one or more of the specific details, or with other methods, components, materials, etc. 
         [0022]    In some cases, well-known structures, materials, or operations are not shown or described in detail in order to avoid obscuring aspects of the invention. Furthermore, the described features, structures, or characteristics may be combined in any suitable manner in one or more embodiments. 
         [0023]    In a conventional forecasting and production planning system  100 , illustrated in  FIG. 1 , a forecasting engine  102  receives historical sales data  104  directly from a point-of-sale (POS) feed  106 . The POS feed  106  may be implemented on a network server, which receives daily sales or transaction-level sales for one or more products from a number of POS devices  108  (e.g., cash registers). The POS feed  106  may be accessible, for example, through a local area network (LAN) or the Internet. 
         [0024]    The forecasting engine  102  uses the historical sales data  104  to generate a forecast  110  of consumer demand for each product. The forecasting engine  102  may refine the forecast  110  using various external data  112 , such as information regarding holidays, weather, seasons, competitor activity, etc. 
         [0025]    A production planning engine  114  uses the forecast  110  to create a plan  116  for producing a sufficient quantity of each product to satisfy the forecasted demand. Depending on the industry, the production plan  116  may include, for example, a list of required ingredients, a labor schedule, etc. 
         [0026]    A production facility  118 , such as a bakery or deli, uses the production plan  116  to produce the forecasted quantities of products, which are then inventoried and sold in due course. A cash register or other POS device  108  records the daily number of sales of each product and periodically sends the sales quantities to the POS feed  106  for future access by the forecasting engine  102 . 
         [0027]    Referring to  FIG. 2 , a typical POS feed  106  provides daily or transaction-level sales  202  for a number of “individual” items, i.e., items whose sale can be specifically recorded and for which a specific forecast of demand is needed. An example of an individual item is a chocolate chip cookie, since a POS device  106  may have a designated code or button for recording the sale, and a bakery needs to know how many chocolate chip cookies to produce each day. In some cases, an individual item may include a group of other individual items sold as a unit, e.g., a cookie tin, since a forecast  110  of the number of cookie tins to produce in a given day may be desirable. 
         [0028]    The POS feed  106  may also provide daily or transaction-level sales  204  for one or more “miscellaneous group” items. Many POS devices  106  allow sales of Individual items to be recorded under “miscellaneous” or “variety” designations. This can be helpful to a check-out clerk who does not know the specific code for an individual item. For example, a chocolate chip cookie may be rung up as a “cookie” or as a “miscellaneous bakery” item. This is also required when a group of items can only be sold using a single code. For example, varieties of bagels (blueberry bagel, onion bagel, plain bagel, etc.) may only be sold using a ‘Bagel’ code. 
         [0029]    However, the existence of miscellaneous group items on a cash register is problematic to forecasting and production planning. Because sales of miscellaneous group items comprise undifferentiated sales of one or more of the individual items, the resulting historical sales data  104  are ambiguous. For example, as shown in  FIG. 2 , sixty cookies were rung up as a generic “cookie” item, as opposed to the particular variety of cookie, which represents almost two-thirds of the reported sales. 
         [0030]    A conventional forecasting engine  102  might estimate the miscellaneous cookie sales attributable to the individual varieties based on the relative proportions of the individual item sales quantities  202 . However, such an estimate can be very inaccurate. For example, suppose that, of the sixty generic cookie sales, fifty were oatmeal cookies. A forecast  110  based on a proportional allocation of the miscellaneous group item sales would be inaccurately weighted to the other varieties. 
         [0031]      FIG. 3  is a block diagram of a forecasting and production planning system  300  according to an embodiment of the invention that solves the aforementioned problems and disadvantages. A point-of-sale (POS) interface  302  receives the historical sales data  104  from the POS feed  106 . The historical sales data  104  includes individual and miscellaneous group item sales quantities  202 ,  204  for the same particular time period, such as a day or a portion of a day. 
         [0032]    As described below, the POS interface  302  may optionally include logic for scrubbing, removing, or otherwise blocking certain types of data. For example, special orders are likely to be one-time events. Hence, the POS interface  302  may automatically exclude sales quantities  202 ,  204  marked as special orders, generating scrubbed sales data  304 . 
         [0033]    An item indexer  306  receives the scrubbed sales data  304  and creates an item index  308  for each individual item. As explained in greater detail hereafter, an item index  308  is a fraction or percentage contribution of an individual item to the sales of an associated miscellaneous group item. In one embodiment, the item indexer  306  relies on production data  310  from the production facility  118  to create the indices  308 . 
         [0034]    A sales disambiguator  312  uses the item indices  308  and the scrubbed sales data  304  to generate disambiguated or revised sales quantities  314 , representing the actual quantity of each product sold. The disambiguated sales quantities  314  may then be fed to the forecasting engine  102  to provide a more accurate forecast  316  of demand to the production planning engine  114 . 
         [0035]    Both the forecasting and production planning engines  102 ,  114  may be implemented using components of an available software package, such as Fresh Market Manager™ (FMM), sold by Park City Group, Inc., of Park City, Utah. However, the use of other forecasting and production planning systems are contemplated within the scope of the invention. Furthermore, any of the modules, engines, components, etc., described herein may be implemented using a suitable combination of hardware, software, and/or firmware known to those of ordinary skill in the art. 
         [0036]      FIG. 4  illustrates an optional data-scrubbing function of the POS interface  302 . As noted, historical sales data  104  may include sales quantities  202 ,  204  for individual and miscellaneous group items. In one embodiment, certain sales quantities  202 ,  204  may be tagged or marked as a “special order,” i.e., an order placed and/or fulfilled outside of the usual routine, possibly for customized products, that is not likely to recur with any degree of predictability. An example of a special order at a bakery may be three-dozen red sugar cookies to celebrate the Superbowl victory of Tampa Bay. Any suitable marking or tagging method may be used within the scope of the invention, such as an eXtensible Markup Language (XML) tag or the like. 
         [0037]    Special orders are likely to be one-time events, which makes them of little value from a forecasting perspective. Accordingly, the POS Interface  302  identifies sale quantities  202 ,  204  marked as special orders. The marked sales quantities  202 ,  204  are then scrubbed, removed, masked, or otherwise excluded by the POS interface  302 . The resulting scrubbed sales data  304  may then be provided to the item indexer  306  and sales disambiguator  312  as described above. 
         [0038]    Of course, the data-scrubbing function of the POS interface  302  may be configured in other ways and/or disabled by an operator. Moreover, in alternative embodiments, the item indexer  306  and/or the sales disambiguator  312  may perform the data-scrubbing function. 
         [0039]      FIG. 5  illustrates further details of item indexer  306 . As noted above, the item indexer  306  receives the scrubbed sales data  304  and the production data  310 . In one embodiment, the production data  310  includes, for each individual item, a production quantity  502 , a shrink/waste quantity  504 , and an invoice order quantity  506 . The production quantity  502  is the quantity of each item produced, while the shrink/waste quantity  504  represents the quantity of each item that was discarded either prior to or after packaging. 
         [0040]    The invoice order quantity  506  corresponds to the quantity of each item that was sold by an invoice order, as opposed to a retail, over-the-counter sale. An invoice order differs from a special order in that an invoice order typically occurs with predicable frequency. Moreover, an invoice order usually pertains to standard products, e.g., three-dozen blueberry bagels. 
         [0041]    The item indexer  306  uses the production data  310 , including the production quantities  502 , shrink/waste quantities  504 , and/or invoice order quantities  506 , to generate an item index  308  for each individual item. In the depicted embodiment, an item index  308  is a number between zero and one, and represents fraction or percentage contribution of an individual item to the quantity sales  204  of an associated miscellaneous group item (e.g., “cookies”). 
         [0042]    One algorithm for calculating the item indices is  308  set forth in the following pseudocode. Those of skill in the art will recognize that the algorithm may be implemented using any conventional programming language, such as C++. Java, or the like. 
         [0043]    For Each Miscellaneous Group Item: 
         [0000]    
       
         
               
             
           
               
                   
               
             
             
               
                  Sum = 0 
               
               
                  For each Individual Item: 
               
               
                   Misc. Net Quantity of Individual Item (MNQ) = Production Total − 
               
               
                   Shrink/Waste Total − Invoice Orders Total − Individual Item Sales 
               
               
                   Total 
               
               
                   Sum = Sum + MNQ 
               
               
                  End for (Individual Item) 
               
               
                  For each individual Item: 
               
               
                   Index = MNQ / Sum 
               
               
                  End for (Individual Item) 
               
               
                 End for (Miscellaneous Group Item) 
               
               
                   
               
             
          
         
       
     
         [0044]      FIG. 6  illustrates the above-identified algorithm in connection with sample data. For simplicity, only a single miscellaneous group item is used in this example. However, those of skill in the art will recognize that the techniques disclosed herein may be used for multiple miscellaneous group items. 
         [0045]    Initially, the item indexer  306  subtracts the shrink/waste quantities  504 , invoice order quantities  506 , and individual item sales quantities  202  from the production quantities  502  for each individual item. The resulting figure is a “miscellaneous net quantity” (MNQ)  602  of each individual item that was not accounted for in the individual item sales quantities  202  or by non-point-of-sale transfers (e.g., invoice orders, shrink/waste). 
         [0046]    While determining the MNQ  602  for each individual item, a running sum  604  of the MNQs for all of the individual items is made. The item index  308  for a particular individual item is then calculated by dividing the MNQ  602  for that item by the MNQ sum  604  for all of the individual items. 
         [0047]    In the depicted example, 100 chocolate chip cookies were produced, of which 20 were discarded, none were sold by invoice order, and 30 were sold at the cash register. Hence, 50 chocolate chip cookies are not accounted for (the MNQ  602 ). The sum of the MNQs  602  for all cookie varieties is 100. Accordingly, the item index  308  for the chocolate chip cookies, as a percentage or fraction of the sales quantities  204  for the “cookies” miscellaneous group item is 0.5. 
         [0048]    Referring to  FIG. 7 , the sales disambiguator  312  uses the item indices  308  to calculate disambiguated sales quantities  314  for each of the individual items. With respect to each individual item, the sales disambiguator  312  adds the sales quantity  202  for the individual item to a product of the item index  308  for the individual item and the sales quantity  204  for the associated miscellaneous group item. After all of the disambiguated sales quantities  314  are calculated, they are provided to the forecasting engine  102 . 
         [0049]    In the illustrated example, the item index  308  for chocolate chip cookies is 0.5. In addition, the sales quantity  204  for the “cookies” miscellaneous group item is 60, and the sales quantity  204  for chocolate chip cookies, as recorded at the point-of-sale, is 30. Based on these data, the disambiguated sales quantity  314  for chocolate chip cookies is 60. 
         [0050]      FIG. 8  provides a comparison of the disambiguated sales quantities  314  of  FIG. 7  with estimated sales quantities based on a proportionate allocation of the miscellaneous group item sales quantities  204  among the sales quantities  202  for the various individual items. As may be observed, the estimated sales quantity for oatmeal cookies is 27% higher than the actual, disambiguated sales quantity  314 . Even more significant is the estimated sales quantity for sugar cookies, which is 42% less than the actual, disambiguated sales quantity  314 . 
         [0051]    In view of the foregoing, a forecast  110  based on the estimated sales quantities, as in conventional approaches, would be highly inaccurate, resulting in the production of too many of some varieties (e.g., peanut butter cookies and sugar cookies), while not producing enough of other varieties (e.g., chocolate chip cookies and oatmeal cookies). 
         [0052]      FIG. 9  is a flowchart of a method  900  for disambiguating point-of-sale data that summarizes techniques described above. For simplicity, as in  FIGS. 6 and 7 , only one miscellaneous group item is referenced, although the invention is not limited in this respect. 
         [0053]    Initially, the system  300  receives  902  historical point-of-sale sales  202 ,  204  from the POS feed  106 . Thereafter, for each miscellaneous group item  904 , and then for each individual item  906 , the system  300  calculates  908  an item index  308  for the individual item by dividing a quantity of the individual item produced but not accounted for in point-of-sale quantities for the individual item and any non-point-of-sale transfers (e.g., invoice orders, shrink/waste) by the sum of all individual items produced but not accounted for. 
         [0054]    Next, the system  300  computes  910  a disambiguated sales quantity  314  for the individual item (representing a quantity sold) by adding the sales quantity  202  for the individual item to a product of the item index for the individual item and the sales quantity  204  for the miscellaneous group item. Once all of the disambiguated sales quantities  314  have been calculated, the system  300  provides  912  the disambiguated sales quantities  314  to the forecasting engine  102 . 
         [0055]    While specific embodiments and applications of the present invention have been illustrated and described, it is to be understood that the invention is not limited to the precise configuration and components disclosed herein. Various modifications, changes, and variations apparent to those of skill in the art may be made in the arrangement, operation, and details of the methods and systems of the present invention disclosed herein without departing from the spirit and scope of the present invention.