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