An inventory policy is a rule, and a rule has no cost. What costs money is the behavior the rule produces: orders placed at some rate, stock on a shelf for some time, demands arriving to an empty shelf. Every term of every model has one shape:
\[ \text{cost rate} = \text{price} \times \text{quantity the system exhibits} \]
| Term | Price (you supply) | Quantity (the model computes) |
|---|---|---|
| Ordering | \(k\), dollars per order | order rate, orders per unit time |
| Holding | \(h\), dollars per unit per unit time | average on hand \(\bar{I}\), units |
| Backorder | \(b\), dollars per unit per unit time | average backorders \(\bar{B}\), units |
| Stockout | \(\pi\), dollars per unit | rate of demand not filled, units per unit time |
| Purchase | \(c\), dollars per unit | demand rate \(\lambda\), units per unit time |
| Stocking position | \(f\), dollars per item per location per unit time | none |
The quantities are properties of the system, and computing them is the technical content of the course. The prices are what you supply, and no amount of modeling will produce them.
\[ \begin{aligned} \frac{\$}{\text{order}} \times \frac{\text{orders}}{\text{year}} &= \frac{\$}{\text{year}} &&\text{ordering: a price times a rate}\\ \frac{\$}{\text{unit}\cdot\text{year}} \times \text{units} &= \frac{\$}{\text{year}} &&\text{holding and backorder: a rate-price times a level}\\ \frac{\$}{\text{unit}} \times \frac{\text{units}}{\text{year}} &= \frac{\$}{\text{year}} &&\text{stockout and purchase: a price times a rate} \end{aligned} \]
Every row reduces to dollars per unit time, so the rows can be added. The holding and backorder prices are themselves rates, so they multiply a level: the commonest source of dimensional error in a first cost model.
The purchase term is inert. \(c\lambda\) is identical under every policy when demand is not a decision, so it cannot influence the choice. Its symptom when included in a comparison: the alternatives all look suspiciously alike.
Time units
Every rate must use the same unit, and every price quoted per period must be converted on entry. A missed conversion is the error most likely to survive review, because the answer stays plausible while being wrong by a factor of 365.
The test
A cost belongs in a parameter only if it changes when the quantity that parameter multiplies changes.
Applying it means naming the quantity first. \(h\) multiplies \(\bar{I}\), so a cost belongs in \(h\) only if it rises when one more unit is held for one more unit of time. \(k\) multiplies the order rate, so a cost belongs in \(k\) only if it rises when one more order is placed. A cost that does neither is a period cost: real, possibly large, and irrelevant to the decision, because it is incurred identically under every policy.
The classic failure is a fully allocated warehouse cost per unit: lease, depreciation, heating and management divided by the units that passed through. That figure is correct as an accounting statement and wrong as a model input, because none of those costs change if you hold one more unit. It overstates holding cost and recommends ordering too often.
Unit cost \(c\) is the money tied up in one unit: normally the latest acquisition cost, not an internal transfer price or a customer-facing standard price. It enters the purchase term, which is inert, and the holding cost, which is not.
Holding cost \(h\) is almost never estimated directly. Let \(i\) represent the carrying charge, in dollars per dollar of inventory value per unit time:
\[ h = i\,c, \qquad \text{for example } i = 0.20 \text{ a year: twenty cents to hold a dollar of stock for a year.} \]
The cost of holding is proportional to value, so one carrying charge serves a whole portfolio of differently priced items. Carrying charges are quoted annually, so a model in days uses \(h = ic/365\).
\(h\) multiplies on-hand inventory \(\bar{I}\), not net inventory. The two differ exactly when the system is short, and that difference is charged separately, by \(b\). Writing the holding term on net inventory assumes backorders are negligible.
| Component | Belongs in \(i\)? | Why |
|---|---|---|
| Cost of capital | Yes | Money tied up in stock is unavailable for anything else; usually the floor |
| Obsolescence, deterioration, shrinkage | Yes | Exposure grows with the value held and how long it is held |
| Insurance and inventory taxes | Yes, where assessed on value | Insurers rate on declared value; many jurisdictions levy no inventory tax |
| Storage and space | Only where marginal | In an owned facility below capacity, one more unit costs nothing in space |
| Handling | Rarely | Receiving, picking and shipping scale with throughput, set by customers |
Storage is marginal in three cases: space rented per pallet position per period; a facility at or near capacity, where the right figure is the shadow price of capacity; and a lease that scales with the space used.
Handling volume is set by how much customers buy, not by the policy. Per-receipt handling belongs in \(k\); per-unit handling in \(c\); only stock-driven handling, such as relocation and congestion from holding too much, in \(i\).
\(k\) is the cost of placing one replenishment order, in dollars per order, independent of the order’s size: the requisition, its approval and transmission, receiving and inspecting the shipment, matching the invoice, paying it.
“Fixed” means fixed with respect to the order quantity, not with respect to the number of orders. A cost that scales with the units ordered belongs in \(c\); a cost incurred once per order whatever its size is what \(k\) is.
Inbound freight is the usual complication. The fixed portion of a shipment’s freight behaves exactly like an ordering cost and belongs in \(k\), and it is often larger than it looks: below a carrier’s minimum, the bill does not vary with order size at all. The variable portion scales with units and is as inert as \(c\lambda\). On a scheduled lane the truck departs whether or not you ordered, and no part of it is caused by your order.
If the demand is lost, the harm is a discrete event, once per unit not supplied:
\[ \pi = \text{dollars per unit of demand not filled}, \qquad \text{cost rate } \pi\lambda_{\ell}. \]
If the demand is backordered, the harm is a duration: one unit owed for ten days is worse than one owed for one day, and a per-incident charge cannot express that.
\[ b = \text{dollars per unit backordered per unit time}, \qquad \text{cost rate } b\,\bar{B}. \]
They are not interchangeable notation; they describe different physical situations. Some settings need both, a charge for the expedite a stockout triggers plus one for the waiting, but never both for the same consequence.
Backorders and waiting are one measurement
By Little’s law \(\bar{B} = \lambda\overline{W}\), so \(b\bar{B} = b\lambda\overline{W}\). An organization that cannot price a backorder can often state a tolerable wait, and that is enough.
\(f\) is the cost, per unit time, of carrying an item at a location at all: the catalog record, the reserved bin, the cycle counts it attracts, the planner attention it consumes. Conventionally dollars per item per location per year.
This is not holding cost
Holding cost scales with the quantity on hand. Stocking position cost is independent of the quantity held, the same for one unit or a thousand. Neither should be folded into the other.
It is easy to dismiss and it is not a detail. For a typical mid-value item it is often larger than the holding cost of the stock it houses, and because it multiplies nothing, it is the only term that penalizes stocking an item in more places. A model without it will forward-position marginal items no practical organization would stock.
The order quantity depends on \(k/h\) under a square root. Let \(\theta\) represent the factor by which the estimated \(k/h\) departs from the true value:
\[ \begin{aligned} \frac{Q}{Q^{*}} &= \sqrt{\theta} &&\text{compressed}\\ \frac{C}{C^{*}} &= \frac{1}{2}\left(\sqrt{\theta} + \frac{1}{\sqrt{\theta}}\right) &&\text{the penalty}\\ \theta = 2 &: \tfrac{1}{2}(1.414 + 0.707) = 1.061 &&\text{6}\%\\ \theta = 4 &: \tfrac{1}{2}(2 + 0.5) = 1.25 &&\text{25}\% \end{aligned} \]
Read the curve from its minimum outward: it touches zero at \(\theta = 1\) and is flat on both sides, and symmetric on the doubling scale. The square root is doing the protecting.
Because the cost surface is flat, a badly wrong parameter produces a cost that looks perfectly acceptable while the policy it recommends is substantially wrong. The model will not complain.
If the recommendation is a number of units to order, a 6% penalty may be tolerable. If the recommendation is which of two configurations to adopt, such as whether to stock an item at a location at all, a parameter error costing 6% can flip the decision outright. The flatness that protected the cost is what makes the comparison delicate.
Two consequences. Put estimation effort where the answer is sensitive, not uniformly. And when a parameter cannot be pinned down, do not defend a point estimate: report the value at which the recommendation changes.
Every cost term is a price times a quantity, and every row must reduce to dollars per unit time.
The purchase term is inert, and \(f\) has no quantity at all.
A cost belongs in a parameter only if it changes with the quantity that parameter multiplies; period costs are real and irrelevant.
\(h = ic\) multiplies on-hand stock, and storage and handling belong in \(i\) only where marginal.
\(k\) is fixed with respect to order size; \(\pi\) prices an event and \(b\) a duration.
Errors in \(k/h\) are compressed by a square root, which protects the cost and endangers the comparison.
Read before next session: Estimating Cost Parameters from Standard Data and Performance Measures.
Today’s material was Cost Parameters.
Next session:
Bring the carrying-components table. Next session fills it in from a real depot’s accounts.