Product Thinking + Doing

Cost-Benefit of Applying IoT Analytics ML Model

The value of Internet of Things (IoT) is in the data produced not by a single endpoint, but by millions of endpoints.

Getting Started

# R version
R.version.string
## [1] "R version 4.0.3 (2020-10-10)"
require(devtools)

devtools::install_version("caret", version = "6.0-86", repos = "http://cran.us.r-project.org")
devtools::install_version("pROC", version = "1.17.0.1", repos = "http://cran.us.r-project.org")
devtools::install_version("dplyr", version = "1.0.4", repos = "http://cran.us.r-project.org")
devtools::install_version("data.table", version = "1.14.0", repos = "http://cran.us.r-project.org")

library(caret)
library(pROC)
library(dplyr)
library(data.table)
#Generate sample data
simdata = function(N=1000) {
  
  #simulate 4 features
  X = data.frame(replicate(4,rnorm(N)))
  #create a hidden data structure to learn
  hidden = X[,1]^2+sin(X[,2]) + rnorm(N)*1
  #10% TRUE, 90% FALSE
  rare.class.probability = 0.1
  #simulate the true classification values
  y.class = factor(hidden<quantile(hidden,c(rare.class.probability)))
  return(data.frame(X,Class=y.class))
}

#make some data structure
model_data = simdata(N=50000)

#train a logistic regression model on the simulated data
training <- createDataPartition(model_data$Class, p = 0.6, list=FALSE)
trainData <- model_data[training,]
testData <- model_data[-training,]
glmModel <- glm(Class~ . , data=trainData, family=binomial)
testData$predicted <- predict(glmModel, newdata=testData, type="response")

#calculate AUC
roc.glmModel <- pROC::roc(testData$Class, testData$predicted)
## Setting levels: control = FALSE, case = TRUE
## Setting direction: controls < cases
auc.glmModel <- pROC::auc(roc.glmModel)
print(auc.glmModel)
## Area under the curve: 0.769
#Pull together test data and predictions
simModel <- data.frame(trueClass = testData$Class,
                       predictedClass = testData$predicted)

# Reorder rows and columns
simModel <- simModel[order(simModel$predictedClass, decreasing = TRUE), ]
simModel <- select(simModel, trueClass, predictedClass)
simModel$rank <- 1:nrow(simModel)

#Assign costs for failures and proactive repairs
proactive_repair_cost <- 253   # Cost of proactively repairing a part
failure_repair_cost  <- 1000   # Cost of a failure of the part (include all costs such as lost production, etc not just the repair cost)

# Define each predicted/actual combination
fp.cost <- proactive_repair_cost # The part was predicted to fail but did not (False Positive)
fn.cost <- failure_repair_cost  # The part was not predicted to fail and it did (False Negative)
tp.cost <- (proactive_repair_cost - failure_repair_cost) # The part was predicted to fail and it did (True Positive). This will be negative for a savings.
tn.cost <- 0.0                     # The part was not predicted to fail and it did not (True Negative)
AI-First Technical Product Management