Deploying a car price model using R and AzureML

Recently Microsoft released the AzureML R package, it allows R users to publish their R models (or any R function) as a web service on the Microsoft Azure Machine Learning platform. Of course, I wanted to test the new package, so I performed the following steps.

Sign up for Azure Machine Learning

To make use of this service you will need to sign up for an account. There is a free tier account, go to the Azure machine learning website.

Get the AzureML package

The azureml package can be installed from GitHub, follow the instructions here.

Create a model in R to deploy

In a previous blog post I described how to estimate the value of a car. I scraped the Dutch site www.autotrader.nl where used cars are sold. For more than 100.000 used cars I have their make, model, sales price, mileage (kilometers driven) and age. Let’s focus again on Renault, and instead of only using mileage I am also going to use the age, and the car model in my predictive splines model. For those who are interested the Renault data (4MB, Rda format, with many more variables) is available here.


library(splines)
RenaultPriceModel = lm(Price ~ ns(Kilometers, df=5)*model + ns(Age,df=3) , data = RenaultCars)

Adding interaction between Kilometers and car model increases the predictive power. Suppose I am satisfied with the model, it has a nice R-squared (0.92) on a hold-out set, now I am going to create a scoring function from the model object



RenaultScorer = function(Kilometers, Age, model)
{
  require(splines)
  return(
    predict.lm(
      RenaultPriceModel, 
      data.frame("Kilometers" = Kilometers, "Age" = Age, "model" = model)
   )
  )
}

# predict the price for a 1 year old Renault Espace that has driven 50000 KM
RenaultScorer(50000,365,"ESPACE")
33616.91 

To see how estimated car prices vary over the age and kilometers, I created some contour plots. It seems that Clios loose value over years while Espaces loose value over kilometers. Sell your five year old Espace with 100K kilometers for 20.000 Euro, so that you can buy a new Clio (0 years and 0 kilometers)..

blog_countours

Before you can publish R functions on Azure you need to obtain the security credentials to your Azure Machine Learning workspace. See the instructions here. The function, RenaultScorer, can now be published as a web service on the AzureML platform using the publishWebservice function.


library(AzureML)

myWsID = "123456789101112131415"
myAuth = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# publish the R function to AzureML
RenaultWebService = publishWebService(
  "RenaultScorer",
  "RenaultPricerOnline",
  list("Kilometers" = "float", "Age" = "float", "model" = "string"),
  list("prijs" = "float"),
  myWsID,
  myAuth
)

Test the web service

In R, the AzureML package contains the consumeList function to call the web service we have just created. The key and the location of the web service that we want to call are contained in the return object of the publishWebservice.


### predict the price of a one year old Renault Espace using the web service
RenaultPrice = consumeLists(
  RenaultWebService[[2]][[1]]["PrimaryKey"],
  RenaultWebService[[2]][[1]]$ApiLocation,
  list("Kilometers" = 50000, "Age" = 365, "model" = "ESPACE")
)
RenaultPrice

 prijs
1 33616.90625

In the Azure machine learning studio you can also test the web service.

AzureStudio

Azure ML studio

My web service (called RenaultPricerOnline) is visible now in Azure machine Learning studio, click on it and it will launch a dialog box to enter kilometers, age and model.

AzureStudio2

The call results again in a price of 33616.91. The call takes some time, but that’s because the performance is throttled for free tier accounts.

Conclusion

In R I have created a car price prediction model, but more likely than not, the predictive model will be consumed by another application than R, It is not difficult to publish an R model as a web service on the Azure machine learning platform. Once you have done that, AzureML will generate the api key and the link to the web service, so that you can provide that to anyone who wants to consume the predictive model in their applications.

Advertisements

4 thoughts on “Deploying a car price model using R and AzureML

  1. Pingback: Deploying a car price model using R and AzureML | Mubashir Qasim

  2. Pingback: Distilled News | Data Analytics & R

  3. Pingback: Deploying a car price model using R and AzureML « Manipulate Magazine: Math 4 You By Us Group Illinois

  4. Hi,

    I could not replicate. When I publishWebService() it get stuck in:

    “…
    adding: stats/tests/ts-tests.R (deflated 61%)
    adding: stats.zip (deflated 0%)
    adding: c46fa8ce498811e58639390694d095db (deflated 0%)”

    Tried twice and at the same time uploaded the database directly to AzureML to check if it was a bandwidth issue.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s