RFID Technology in Big Retail

More stock + less guesswork = better retail 💪

By Cal Roff July 5, 2025

One of the biggest problems major retailers face are those around inventory visibility. What is our shrink? Why is said shrink happening? Why are we not selling through these particular products?Answers to these sorts of questions could save companies tens of millions of dollars, so it at least sets a solid case for investing heavily in better ways to track inventory right?

Correct! Leading retailers are pioneering innovative technologies to address this problem, and an increasingly common, scalable means of doing so is the use of Radio Frequency Identification (RFID). What this typically involves is the attachment of Electronic Product Codes (EPC) tags to individual product units, which are scanned from a radio-frequency transmitting device. The EPC tags are passive and reflect back the signal to the tranmitter/reader, which contains an encoding of their unique identifier. The identifier can then be linked to product data in a database, thus enabling unit-level inventory tracking.

I work in the analytics team of one of these retailers with a specific focus on use of RFID in stores, and it has been a pretty fun ride given how we're an early adopter this technology. I'll briefly layout a general process flow of how it operates in our business (without throwing away too much proprietary information):

  1. RFID-scanning robot travels across store according to prespecified geographical way-points, mapped out to ensure all EPC tags in the store are 'readable'.

  2. Product unit embedded with EPC tag recieves the scanner robot's signal, which is then reflected back to the robot.

  3. Scanner robot logs data from the interaction containing the unique EPC identifier, approximate location coordinates and the container in which it was read.

  4. Stockroom-to-shopfloor replenishment tasks are generated based on each product's EPC count within each store container, and made available to a store team member through a mobile application.

  5. Logged data, metadata and subsequent replenishment task data is made available in a database for reporting and machine learning purposes.

So not only do we have daily visibility of our inventory, we also have a means of shopfloor replenishment that ensures all products in the shop are represented on the shopfloor. This is a huge value-unlocker for the business and accounts for tens of millions of dollars in annual sales we would have otherwise not realised due to products we have being not being availabe to the customer.

As for an explanation of the value of inventory visibility, the business can proactively raise dispatch orders from distribution centers or purchase orders with suppliers when the robot finds a store is running low on stock for a particular product. This will drive enhanced product availability in all stores in the business.

In case this breakdown of business value is confusing or if you're unfamiliar with some of retail's behind-the-scenes, the key takeways are summarised below:

  1. Inventory visibility: Maxmising product availability in stores.

  2. Shopfloor replenishment: For products that are available in a store, maximising their representation on the shopfloor (customer accessibility) I.e., not holding in the stockroom.

Before we dive in to insights, let's quickly go th rough the sorts of datasets you can expect to generate as a result of having an RFID robot:

Table 1: Sample metadata associated with an RFID robot run
Store ID Date Run ID Waypoint Coverage Run Accepted?
S1 2025-01-01 S1 | 2025-01-01 95% True
S1 2025-01-02 S1 | 2025-01-02 50% False
... ... ... ... ...
S10 2025-02-15 S10 | 2025-02-15 92% True
Table 2: Sample EPC scan data captured during an RFID robot run
Run ID Product ID EPC ID Container XYZ Coordinates
S1 | 2025-01-01 P1 1 Shopfloor [10,5,2]
S1 | 2025-01-01 P1 2 Stockroom [15,20,1]
... ... ... ... ...
S1 | 2025-01-01 P99 1000 Shopfloor [8,12,1]
Given the EPC data in table 2, we can determine whether it's appropriate to use in an advanced analytics context by scoping whether the underlying robot run was 'accepted' via the data present in table 1 ('Run Accepted?').

The replenishment task data generated would typically be made available in the following format:

Table 3: Sample stockroom-to-shopfloor replenishment task data generated from an accepted RFID robot run
Store Task Date Product ID Replenishment Units Generated Replenishment Units Completed Task Completed Timestamp
S1 2025-01-01 P1 4 4 2025-01-01 09:01:38
S1 2025-01-01 P5 3 3 2025-01-01 09:04:21
... ... ... ... ... ...
S1 2025-01-01 P5 3 0 NULL

The base metrics which capture how well a store measures in terms of inventory visibility and effective shopfloor replenishment are inventory accuracy and replenishment completion rate respectively. $$\displaystyle I_{s,t} = \frac{\sum_{i \in K_s} \min \{X_{s,i,t}, E_{s,i,t}\}}{\sum_{i \in K_s} \max \{X_{s,i,t}, E_{s,i,t}\}} \tag{1} $$ $$\displaystyle C_{s,t}^{Recorded} = \frac{\sum_{i \in K_s} R_{s,i,t}^{Recorded}}{\sum_{i \in K_s} R_{s,i,t}^{Generated}} \tag{2}$$ Where:

  • \( I_{s,t} \rightarrow \) Inventory accuracy for store s on day t.

  • \( C_{s,t}^{Recorded} \rightarrow \) Team-member recorded replenishment completion rate for store s on day t.

  • \( K_{s} \rightarrow \) Set of all active products in store s.

  • \( X_{s,i,t} \rightarrow \) Inventory system record or book stock-on-hand (SOH) for product i in store s on day t.

  • \( E_{s,i,t} \rightarrow \) Distinct EPC tags counted by the RFID robot for product i in store s on day t.

  • \( R_{s,i,t}^{Recorded} \rightarrow \) Replenishment units completed for product i in store s on day t.

  • \( R_{s,i,t}^{Generated} \rightarrow \) Replenishment units generated for product i in store s on day t.

Note that in table 3, the values present in the Replenishment Units Completed field are a result of team members submitting replenishment tasks they've completed through some application. In rare instances, logging completion may be a 'tick and flick' exercise rather than the product actually being replenished on the shopfloor. This means that \( R_{s,i,t}^{Recorded} \) in equation (2) is not truly representative of the replenishment that was actually done. The good news, however, is that we can use EPC data to track movement of individual EPC tags between containers (i.e., shopfloor, stockroom) and adjust our reporting of completion accordingly: $$\displaystyle C_{s,t}^{Actual} = \frac{\sum_{i \in K_s} \min\{R_{s,i,t}^{Actual}, R_{s,i,t}^{Recorded}\}}{\sum_{i \in K_s} R_{s,i,t}^{Generated}} \tag{3}$$ $$\displaystyle R_{s,i,t}^{Actual} = \sum_{j \in E_{s,i}}\mathbb{1}\{([\text{Area}]_{j,t} = \text{'BOH'}) \land ([\text{Area}]_{j,(t+1)} \ne \text{'BOH'})\} \tag{4}$$ Where:

  • \( R_{s,i,t}^{Actual} \rightarrow \) Replenishment units actually completed for product i in store s on day t.

  • \( E_{s,i} \rightarrow \) Set of all EPCs in store s for product i.

  • \( K_{s} \rightarrow \) Set of all active products in store s.

  • \( [\text{Area}]_{j,t} \rightarrow \) Area/container of EPC tag j on day t.

  • \( \mathbb{1}\{\text{Condition}\} = \begin{cases} 1 & \text{if } \text{ 'Condition' is met } \\ 0 & \text{otherwise} \end{cases}\)

The ability to see what needs to be done in maintaning shopfloor availability, while having visibility over how effectively it's being done, is an extremely powerful tool in reducing millions of dollars in lost sales.

In response to these insights, retailers may ask how to extend this level of insight into other stock-handling processes, and stock integrity in general. The good news is that it's definitely possible! A real pain-point surrounding accurate inventory comes from stores' ability to process incoming stock in a timely manner. I'll present two different scearios that relate to this:

  1. Ensuring an inbound load is scanned into the system as it arrives: If new stock is failed to be scanned into the inventory system by a team member, then the RFID-reported (and actual) stock-on-hand (SOH) will exceed what the system currently believes we have.

  2. When the load is scanned, ensuring that stock is worked to the shopfloor or stockroom in a timely manner: If new stock is promptly scanned into the inventory system, but is not worked into a designated area of the store where the RFID robot is programmed to read it (i.e., shopfloor or stockroom), then the RFID-reported SOH will be less than what's actually present.

A possibility which can arise as a result of the first scenario is the existence of negative SOH, where our system believes we are at a neagtive SOH position if we sell through the newly arrived product's units before they're actually scanned into the system. So how do we track how effectively a store scans newly arrived stock? The answer is the manifest score: $$ \displaystyle M_{s,t} = 1 - \left( \frac{\sum_{i\in K_s} \sum_{t \in T} Q_{s,i,t}^{Late}}{\sum_{i\in K_s} \sum_{t \in T} Q_{s,i,t}^{Total}} \right) \tag{5} $$ $$ \displaystyle Q_{s,i,t}^{Late} = \begin{cases} A_{s,i,t} & \text{if } \left( A_{s,i, t} > 0 \right) \land \left (Q_{s,i,(x|x \ge t+1)}^{Scanned} > 0 \right) \\ 0 & \text{otherwise} \end{cases} \tag{6} $$ $$ \displaystyle A_{s,i,t} = E_{s,i,(t+1)} - E_{s,i,t} + \Delta_{s,i,t}^{Movement} \tag{7}$$ Where:

  • \( M_{s,t} \rightarrow \) Manifest Score for store s on day t.

  • \( Q_{s,i,t}^{Late} \rightarrow \) An estimate of the number of stock units received from the distribution centre (DC) in store s, product i on day t, but were scanned into the inventory system late (i.e., after they were worked onto the shopfloor or stockroom).

  • \( Q_{s,i,t}^{Total} \rightarrow \) The total units received from the DC in store s, product i on day t.

  • \( A_{s,i,t} \rightarrow \) The unexplained difference between the next and current day's stock level for store s, product i.

  • \( Q_{s,i,(x|x \ge t+1)}^{Scanned} \rightarrow \) Total units scanned into the inventory system in store s, product i on or after the next date.

  • \( \Delta_{s,i,t}^{Movement} \rightarrow \) Recorded net stock movement (e.g., sales, write-offs) for store s, product i on day t.

What we're attempting to measure is the proportion of incoming stock that was read by the RFID robot (after having being worked to the shopfloor or stockroom), though had failed to be scanned into the inventory system prior. We do this by detecting products which had an unexplained increase in stock (equation 7), though was then reconciled by an inventory scan-in at a later date (equation 6).

So what is the implication? If we adjust our stock levels to align with what the robot counted, then we'd falsely be writing on stock when the inventory scan-in is done, since we'd had done so in proxy via the RFID count-driven adjustment. Thus in the case of consistent late scan-ins, IA would be substantially impacted.

The second scenario we touched on is really just the operational opposite of the first. A team member scans newly-arrived inventory into the system, though that stock is not worked to the shopfloor or stockroom - an area of the store in which the RFID robot can read it. To measure how well team members process new stock as it's scanned in, we can use the load processing score: $$ \displaystyle L_{s,t} = \frac{\sum_{i \in K_s} \min \{E_{s,i,t}^{New} + E_{s,i,(t+1)}^{New} , Q_{s,i,t}^{Scanned}\}}{\sum_{i \in K_s} Q_{s,i,t}^{Scanned}} $$ Where:

  • \( E_{s,i,t}^{New} \rightarrow \) New EPC tags counted by the RFID robot for product i in store s, day t. The EPC tags are new in the sense that day t was the first day they were ever read in the store.