
Mean-field feedback-loop recursion for two regions
Source:R/feedback_loop.R
morie_feedback_loop_meanfield.RdIterates the expected discovered-crime counts of two regions under a patrol allocation proportional to those counts. Under the naive update the region with the higher true rate absorbs the whole patrol whatever the ratio of the rates; under the corrected update the allocation converges to the true-rate proportion.
Usage
morie_feedback_loop_meanfield(
lam_a,
lam_b,
c_a0,
c_b0,
n_steps = 100L,
update = c("naive", "corrected"),
rho = 0
)Arguments
- lam_a, lam_b
True crime rates (per patrol visit) of regions A and B; positive.
- c_a0, c_b0
Initial discovered-crime counts; positive.
- n_steps
Number of steps to iterate.
- update
"naive"(discovered counts fed back as they are) or"corrected"(each discovery discounted by the presence that produced it, so the increment is the true rate).- rho
Share of crimes that reach the record through public reports independent of patrol presence, in
[0, 1]. Withrho > 0the naive share is proved never to exceed \(\max(x_0, \lambda_A/(\lambda_A + \rho\lambda_B))\) (Research.P4.rho_cap): reports cap the loop strictly below 1 but strictly above the true-rate proportion unlessrho = 1.
Value
A data frame with step, share_a (share of patrol
sent to A), c_a, c_b, and the attribute
"limit" giving the proved limit of the share (see
morie_feedback_loop_limit).
Details
The runaway is a limit statement, and the limit is approached logarithmically: the one-step drift is \(x(1-x)(\lambda_A-\lambda_B)/c_n\) with \(c_n\) growing linearly, so the share moves like a harmonic sum. From a 10/10 start with rates 0.3 and 0.2 the share reaches 0.89 after 20,000 steps and 0.97 after two million; from a 1/99 start with rates 0.21 and 0.20 it moves from 0.010 to 0.015 in two million steps. A claim that a feedback loop "will" concentrate patrols therefore has to state its horizon; the theorem gives the destination, the recursion gives the speed.
References
Ensign D, Friedler SA, Neville S, Scheidegger C, Venkatasubramanian S (2018). Runaway feedback loops in predictive policing. Proceedings of Machine Learning Research 81, 160-171.
See also
morie_feedback_loop_sim for the stochastic urn,
morie_feedback_loop_limit for the proved limits.
Examples
mf <- morie_feedback_loop_meanfield(0.3, 0.2, 10, 10, n_steps = 200)
tail(mf$share_a, 1) # climbing towards 1, not towards 0.6
#> [1] 0.6214194
attr(mf, "limit")
#> $share_a
#> [1] 1
#>
#> $theorem
#> [1] "Research.P4.naiveShare_tendsto_one"
#>
#> $note
#> [1] "runaway: the higher-rate region absorbs the whole patrol"
#>
cf <- morie_feedback_loop_meanfield(0.3, 0.2, 10, 10, n_steps = 200,
update = "corrected")
tail(cf$share_a, 1) # approaching 0.3 / 0.5 = 0.6
#> [1] 0.5833333