We model firms as having two characteristics:
An AI tool with effectiveness \(\omega \in (0, 1)\) reduces labor demand to:
\[ \text{Effective headcount} = n(1 - \omega v) \]
The value (cost savings) for the firm is:
\[ \text{Value} = c \cdot n \cdot \omega v \]
The cost (price paid) to the vendor is:
\[ \text{Price paid} = p \cdot n \cdot (1 - \omega v) \]
The vendor also incurs a support cost:
\[ \text{Cost to vendor} = w \cdot n \cdot (1 - \omega v) \]
A firm adopts the AI tool if:
\[ c n \omega v > p n (1 - \omega v) \quad \Rightarrow \quad v > \frac{p}{\omega c + p} \]
Let \(v^* = \frac{p}{\omega c + p}\) denote the threshold above which firms adopt.
Given \((n, v)\), if \(v > v^*\), the total payment by the firm is:
\[ \text{Payment}(n,v) = p \cdot n \cdot (1 - \omega v) \]
The vendor’s profit from an \((n,v)\) adopter firm is \((p-w) n (1-\omega v)\). Total profit across all adopter firms (\(v > v^\ast)\) of given size \(n\) is \(\int_{v^\ast}^{1} (p-w) n (1-\omega v) dv\) = \((p-w) n \int_{v^\ast}^{1} (v - \omega \frac{v^2}{2}) \vert_{v^\ast}^{1} dv\) = \((p-w) n \left(1 - \frac{\omega}{2} - v^* + \frac{\omega}{2}(v^*)^2 \right)\).
Further, looking at this across all firm sizes involves a second integral over \(n\); that integral resolves differently depending on whether \(n\) follows a uniform or Beta distribution.
This analysis models optimal pricing for an AI vendor. Each buyer firm has size \(n \in [0,1]\) and heterogeneity parameter \(v \in [0,1]\). The AI reduces workforce to \(n(1 - \omega v)\). Vendor charges \(p\) per supported seat and incurs a cost \(w\) per seat.
# Parameters
omega <- 0.8
c <- 1000 # Cost per employee
w <- 0.3 # Vendor per-seat cost
v_star <- function(p, omega, c) {
p / (omega * c + p)
}
v_integral <- function(p, omega, c) {
v_cut <- v_star(p, omega, c)
1 - omega/2 - v_cut + (omega/2) * v_cut^2
}
profit_uniform_cost <- function(p, omega, c, w) {
0.5 * (p - w) * v_integral(p, omega, c)
}
p_vals <- seq(1, 5000, by = 1)
profits <- sapply(p_vals, profit_uniform_cost, omega = omega, c = c, w = w)
df <- data.frame(p = p_vals, profit = profits)
ggplot(df, aes(x = p, y = profit)) +
geom_line(color = "blue") +
labs(title = "Profit vs Price (Uniform Distribution)", x = "Price (p)", y = "Profit")
opt_result <- optimize(function(p) -profit_uniform_cost(p, omega, c, w),
interval = c(1, 5000), maximum = FALSE)
p_star <- opt_result$minimum
profit_star <- -opt_result$objective
v_cut_star <- v_star(p_star, omega, c)
cat("Optimal p:", round(p_star, 2), "\n")
## Optimal p: 2402.4
cat("Optimal profit:", round(profit_star, 2), "\n")
## Optimal profit: 89.99
cat("Cutoff v*:", round(v_cut_star, 4), "\n")
## Cutoff v*: 0.7502
v_vals <- seq(v_cut_star + 0.01, 1, length.out = 10)
n_vals <- seq(0.1, 1, length.out = 10)
payment_grid <- expand.grid(n = n_vals, v = v_vals)
payment_grid <- expand.grid(n = n_vals, v = v_vals)
# payment_grid$payment <- with(payment_grid, p_star * n * (1 - omega * v))
payment_grid <- payment_grid %>% mutate(nv = n*v, payment = p_star * n * (1 - omega * v)) %>% arrange(nv)
kable(payment_grid[sample(nrow(payment_grid), 10), ] %>% arrange(nv), digits = 4, caption = "Sample Buyer Payments (n, v > v*)")
n | v | nv | payment |
---|---|---|---|
0.2 | 0.8934 | 0.1787 | 137.0650 |
0.2 | 0.9467 | 0.1893 | 116.5805 |
0.3 | 0.9467 | 0.2840 | 174.8708 |
0.6 | 0.7602 | 0.4561 | 564.8285 |
0.5 | 0.9201 | 0.4600 | 317.0569 |
0.5 | 0.9467 | 0.4734 | 291.4513 |
0.9 | 0.7602 | 0.6842 | 847.2428 |
0.8 | 0.8668 | 0.6934 | 589.2289 |
0.9 | 0.8668 | 0.7801 | 662.8825 |
1.0 | 0.8934 | 0.8934 | 685.3249 |