Guest User

Black-market survival analysis: 2014

a guest
Jan 2nd, 2015
811
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. library(XML)
  2. black <- readHTMLTable("http://www.gwern.net/Black-market%20survival", colClasses = c("character", "factor", "factor", "logical",
  3.                                                                "factor", "logical", "character", "logical", "logical",
  4.                                                                "factor", "factor", "logical", "logical",
  5.                                                                "integer", "logical",
  6.                                                                "character"))[[1]]
  7. black[black$Codebase=="",]$Codebase <- NA
  8. black$Start <- as.Date(black$Start); black$End <- as.Date(black$End)
  9. black[is.na(black$End),]$End <- Sys.Date() # assuming the table is up to date
  10. black$Age <- black$End - black$Start
  11. black$Age <- as.integer(black$End - black$Start)
  12.  
  13. # for competing-risks modeling
  14. levels(black$Closure) <- c("alive", "hacked", "raided", "scam", "voluntary") # sets "" to "alive"
  15.  
  16. sum(sort(as.Date(black$Start)) >= as.Date("2014-01-01"))
  17. # [1] 43
  18. sort(black[as.Date(black$Start) >= as.Date("2014-01-01"),]$Market)
  19. #  [1] 1776                     Abraxas                  Alpaca Marketplace      
  20. #  [4] AlphaBay                 Andromeda                Area51                  
  21. #  [7] Armory Vendor Market     BlackBank Market         Black Goblin Market    
  22. # [10] Breaking Bad             Cannabis Road            Cannabis Road 2        
  23. # [13] Cannabis Road 3          Cantina                  Cloud-Nine              
  24. # [16] DarkBay                  Darknet Nation           Deepzon                
  25. # [19] Diabolus                 Doge Road                drugslist              
  26. # [22] evolution                EXXTACY                  Freedom Market          
  27. # [25] GreyRoad                 Hansa                    Hydra                  
  28. # [28] Middle Earth Marketplace Mr Nice Guy              Nucleus Marketplace    
  29. # [31] Onionshop                Panacea                  Pigeon Market          
  30. # [34] Red Sun Marketplace      Sanitarium Market        Silk Street            
  31. # [37] TOM                      Topix 2                  TorBazaar              
  32. # [40] TorEscrow                Tortuga 2                Underground Market      
  33. # [43] Utopia
  34. length(black[black$End > as.Date("2014-01-01") & black$End < as.Date("2015-01-01"),]$Market)
  35. # [1] 46
  36. sort(black[black$End > as.Date("2014-01-01") & black$End < as.Date("2015-01-01"),]$Market)
  37. #  [1] 1776                  Alpaca Marketplace    Andromeda             Armory Vendor Market
  38. #  [5] BlackBox Market       Black Goblin Market   Black Services Market Blue Sky            
  39. #  [9] Breaking Bad          BuyItNow              Cannabis Road         Cannabis Road 2      
  40. # [13] Cannabis Road 3       Cantina               Cloud-Nine            DarkBay              
  41. # [17] Darknet Nation        Deepzon               Doge Road             drugslist            
  42. # [21] EXXTACY               FreeBay               Freedom Market        GreyRoad            
  43. # [25] Hansa                 Hydra                 Mr Nice Guy           Onionshop            
  44. # [29] Pandora               Pigeon Market         Pirate Market         Red Sun Marketplace  
  45. # [33] Sanitarium Market     Silk Road 2           Silk Street           The Marketplace      
  46. # [37] TOM                   Topix 2               TorBay                TorBazaar            
  47. # [41] TorEscrow             Tortuga               Tortuga 2             Underground Market  
  48. # [45] Utopia                White Rabbit        
  49.  
  50. sort(black[black$Alive,]$Market)
  51. #  [1] Abraxas                  Agora                    AlphaBay                
  52. #  [4] Area51                   BlackBank Market         Diabolus                
  53. #  [7] Dream Market             evolution                Middle Earth Marketplace
  54. # [10] Nucleus Marketplace      Outlaw Market            Panacea                
  55. # 67 Levels: 1776 Abraxas Agora Alpaca Marketplace AlphaBay Andromeda Area51 ... White Rabbit
  56. sort(black[black$Alive & black$Start >= as.Date("2014-01-01"),]$Market)
  57. # [1] Abraxas                  AlphaBay                 Area51                  
  58. # [4] BlackBank Market         Diabolus                 evolution              
  59. # [7] Middle Earth Marketplace Nucleus Marketplace      Panacea                
  60. # 67 Levels: 1776 Abraxas Agora Alpaca Marketplace AlphaBay Andromeda Area51 ... White Rabbit
  61.  
  62. sort(table(black[as.Date(black$End) >= as.Date("2014-01-01"),]$Closure))
  63. #    raided    hacked     alive      scam voluntary
  64. #         6         9        12        12        20
  65.  
  66. library(survival)
  67. summary(survfit(Surv(Age, Alive, type="right") ~ 1, data=black))
  68. #  time n.risk n.event survival  std.err lower 95% CI upper 95% CI
  69. #    11     58       1  0.98276 0.017092     0.949823      1.00000
  70. #    20     54       1  0.96456 0.024627     0.917479      1.00000
  71. #    67     38       1  0.93918 0.034675     0.873615      1.00000
  72. #    70     37       1  0.91379 0.042013     0.835050      0.99996
  73. #    81     35       1  0.88768 0.048248     0.797983      0.98747
  74. #   194     23       1  0.84909 0.059621     0.739919      0.97437
  75. #   196     22       1  0.81049 0.068269     0.687151      0.95598
  76. #   331     10       1  0.72945 0.098424     0.559938      0.95027
  77. #   353      7       1  0.62524 0.128160     0.418378      0.93438
  78. #   369      5       1  0.50019 0.151728     0.276014      0.90644
  79. #   395      4       1  0.37514 0.157090     0.165105      0.85238
  80. #   413      3       1  0.25010 0.146261     0.079489      0.78688
  81. plot(survfit(Surv(Age, Alive, type="right") ~ 1, data=black))
  82. # https://i.imgur.com/OamVzjO.png
  83.  
  84. library(cmprsk)
  85. blackc <- with(black, cuminc(Age, Closure, cencode="alive")); blackc
  86. # Estimates and Variances:
  87. # $est
  88. #                      200         400         600         800
  89. # 1 hacked    0.1389819240 0.138981924 0.138981924 0.138981924
  90. # 1 raided    0.0149253731 0.114655933 0.114655933 0.114655933
  91. # 1 scam      0.2069723259 0.299188940 0.299188940 0.299188940
  92. # 1 voluntary 0.2702539221 0.327633148 0.327633148 0.327633148
  93. #
  94. # $var
  95. #                        200           400           600           800
  96. # 1 hacked    0.001900471515 0.00190047151 0.00190047151 0.00190047151
  97. # 1 raided    0.000223039082 0.00212491076 0.00212491076 0.00212491076
  98. # 1 scam      0.002707980885 0.00366455525 0.00366455525 0.00366455525
  99. # 1 voluntary 0.003240020448 0.00383384036 0.00383384036 0.00383384036
  100.  
  101. # risk of shut down by cause:
  102. plot(blackc, lty=1, color=c(1:4), xlab="Days")
  103. # https://i.imgur.com/xZE8O5n.png
  104.  
  105. # Generate predictions of shutdown in next 6 / 12 months for the still-running marketplaces:
  106.  
  107. # You are not expected to understand this ugly hack. I don't either. But it *seems* to work...
  108. # for background, see http://gwern.net/Google%20shutdowns & http://www.gwern.net/Silk%20Road#the-bet-bmr-or-sheep-to-die-in-a-year-by-oct-2014
  109. library(rms)
  110. conditionalProbability <- function (d, followupUnits, cmodel) {
  111.     chances <- rep(NA, nrow(d)) # stash results
  112.  
  113.     for (i in 1:nrow(d)) {
  114.  
  115.         # extract chance of particular subject surviving as long as it has:
  116.         beginProb <- survest(cmodel, d[i,], times=(d[i,]$Age))$surv
  117.         if (length(beginProb)==0) { beginProb <- 1 } # set to a default
  118.  
  119.         tmpFollowup <- followupUnits # reset in each for loop
  120.         while (TRUE) {
  121.             # extract chance of subject surviving as long as it has + an arbitrary additional time-units
  122.             endProb <- survest(cmodel, d[i,], times=(d[i,]$Age + tmpFollowup))$surv
  123.             # survival curve may not reach that far! 'survexp returns 'numeric(0)' if it doesn't;
  124.             # so we shrink down 1 day and try again until 'survexp' *does* return a usable answer
  125.             if (length(endProb)==0) { tmpFollowup <- tmpFollowup - 1} else { break }
  126.         }
  127.  
  128.         # if 50% of all subjects survive to time t, and 20% of all survive to time t+100, say, what chance
  129.         # does a survivor - at exactly time t - have of making it to time t+100? 40%: 0.20 / 0.50 = 0.40
  130.         chances[i] <- endProb / beginProb
  131.     }
  132.     return(chances)
  133. }
  134. # we can't regress on '~ 1' because `survest` crashes inside `conditionalProbability` (‽),
  135. # so let's just toss in all the covariates to make it work despite none of them being well-justified...
  136. cpmodel <- cph(Surv(Age, Alive) ~ Multisig + I2P + Coin + Guns + Fraud, data = black, x=TRUE, y=TRUE, surv=TRUE)
  137. # report in %s rather than raw probabilities for easier reading
  138. black$SixMonth <- round(digits=1, conditionalProbability(black, round(365/2), cpmodel) * 100)
  139. black$OneYear  <- round(digits=1, conditionalProbability(black,          365, cpmodel) * 100)
  140.  
  141. subset(black, Alive, select=c("Market", "SixMonth", "OneYear"))
  142. #                      Market SixMonth OneYear
  143. # 56             Dream Market    100.0   100.0
  144. # 57                    Agora     65.6    65.6
  145. # 58            Outlaw Market     72.3    72.3
  146. # 59                evolution     17.5    17.5
  147. # 60         BlackBank Market     13.1    13.1
  148. # 61                   Area51     57.7    28.1
  149. # 62 Middle Earth Marketplace     56.8    28.8
  150. # 63                 Diabolus     34.7     0.0
  151. # 64      Nucleus Marketplace     15.7     0.0
  152. # 65                  Panacea     89.7    34.4
  153. # 66                  Abraxas     85.9    51.2
  154. # 67                 AlphaBay     92.5    48.4
Advertisement
Add Comment
Please, Sign In to add comment