Billboard Selection Problem

Context

  • Client is a major hospital, specialized in cardiac care.
  • Client intends to build 4 billboards and place them at optimal locations in Bangalore City.
  • Focal city chosen by our team is Bangalore.

Decision Problem

  • Client needs help in identifying 4 potential locations to place billboards that maximize viewership of Hospital information subject to possible budget constraints.

Research Objective

  • Identify the key entities that will help maximize the viewership of billboards.
  • Within the Bangalore City, narrow down to major areas where billboards could be placed.
  • Further narrow down to 4 optimal locations among st the major areas identified.

Why Bangalore City?

Entity List - Selection

To derive the Entity list, our target segment lie under:

Considering the target segment as well as the probability of viewership, below are the entities we have narrowed down to:

  1. Bus_station
  2. Train_station
  3. Malls

Initial Analysis

Initial R Code:

#### INSTALL required packages if they are not installed already      #######################

require("RCurl")||install.packages("RCurl")
require("jsonlite")||install.packages("jsonlite")
require("plotGoogleMaps")||install.packages("plotGoogleMaps")
require("geosphere")||install.packages("geosphere")

#### LOAD required packages    #######################

library("RCurl")
library("jsonlite")
library("plotGoogleMaps")
library("geosphere")

#####   Google API KEY    #######################
key = "AIzaSyBcIbEaJzu2xrMtLSWo4jIealZ27E6dXNI"

#####   Loading the data for the required Places    ####################### 

# Bus Stations search
url = paste0("https://maps.googleapis.com/maps/api/place/radarsearch/json?&query=bus+stations+in+banglore&types=bus_station&location=12.9716,77.5946&radius=50000&key=",key)
doc <- getURL(url)
x <- jsonlite::fromJSON(doc)
busStations = x$results$geometry$location
#head(busStations)
busStations$type = "BusStations"

# Train Stations search
url = paste0("https://maps.googleapis.com/maps/api/place/radarsearch/json?&query=train+stations+in+banglore&types=train_station&location=12.9716,77.5946&radius=50000&key=",key)
doc <- getURL(url)
x <- jsonlite::fromJSON(doc)
trainStations = x$results$geometry$location
#head(trainStations)
trainStations$type = "TrainStations"

# malls search
url = paste0("https://maps.googleapis.com/maps/api/place/radarsearch/json?&query=malls+in+banglore&types=shopping_mall&location=12.9716,77.5946&radius=50000&key=",key)
doc <- getURL(url)
x <- jsonlite::fromJSON(doc)
malls = x$results$geometry$location
#head(malls)
malls$type = "Mall"

#####   Processing    #######################

data = rbind(busStations,trainStations, malls)
dim(data)

sample = data
coordinates(sample) <-~ lng +lat # Create cordinates
proj4string(sample) = CRS('+proj=longlat +datum=WGS84') # Add Projections

m<-mcGoogleMaps(sample,zcol = "type", mapTypeId='ROADMAP') # Plot on Google maps


# Get the coordinates
p2 = data[,1:2]

# calculate distances
dist_mat = matrix(0,nrow(p2),nrow(p2))

for (i in 1:nrow(p2)){
  for (j in 1:nrow(p2)){
    dist_mat[i,j] = distCosine(p2[i,],p2[j,], r=6378173)/1000    
  }
}

# Create clusters based in distances
fit <- hclust(as.dist(dist_mat), method="ward")
plot(fit) # display dendogram

groups <- cutree(fit, k=10) # cut tree into 18 clusters
# draw dendogram with red borders around the 18 clusters
rect.hclust(fit, k=10, border="red") 

sample$group = groups # Assign cluster groups

# Plot stores with clustor as label
m <- mcGoogleMaps(sample, mapTypeId='ROADMAP', zcol="group")

Google Map

My Figure

Dendrogram (grouped into 10 clusters)

My Figure

Cluster Histogram:

My Figure

Interpretation

Optimization Problem

My Figure

Results

Assumption:

  1. Hypothetical viewership distrubution based on the location
  2. Variable cost of the billboard based on the location
  3. Monthly ad budget is 10000 INR

Note: Because of the arbitrarily assignment of viewership numbers, the final selected 4 might not be the optimal locations. This requires more comprehensive method of collecting the accurate viewership data!


We have used Analytic Solver Platform to set up the optimization problem since there were more 200 decision variables.Based on the objective to maximize the viewership while maintaining the cost within the budget, solver provided the below solution:

My Figure

R Code, to plot selected 4 places:

row1 <- as.numeric(c(12.9370699, 77.6266046))
row2 <-  as.numeric(c(12.9258836, 77.675326))
row3 <-  as.numeric(c(12.9203227, 77.6444846))
row4 <-  as.numeric(c(13.0112861, 77.6630975))

data1 = rbind(row1, row2, row3, row4)
data1 <- data.frame(data1)
colnames(data1) <- c("lat","lng")


sample1 = data1
coordinates(sample1) <-~ lng +lat # Create cordinates
proj4string(sample1) = CRS('+proj=longlat +datum=WGS84') # Add Projections

m<-mcGoogleMaps(sample1,zcol = "type", mapTypeId='ROADMAP') # Plot on Google maps

Below picture depicts the 4 selected areas after plotting them on Google MAP:

My Figure


Synergy Team Members:

* Siva Gangadhar G [71610080]
* Shree Sudhha [71610079]
* Sravya Chunduri [71610110]
* Srikanth Vidapanakal [71610084]