Predicting Diamond Prices with caret

Arun
September 08, 2026

Why Caret & Diamond Modeling?

Diamond retail pricing often lacks transparency for prospective buyers.

  • Objective: Provide instant, machine-learning-driven price appraisals based on physical diamond metrics.
  • Key Inputs:
    • Carat weight (continuous slider)
    • Cut quality (ordered factor selection)
    • Clarity grading (categorical dropdown)
  • Engine: Trained using the caret regression pipeline in R.

Training Data: ggplot2::diamonds

The underlying algorithm evaluates empirical diamond sales data:

library(ggplot2)
data(diamonds)
str(diamonds[, c("carat", "cut", "clarity", "price")])
tibble [53,940 × 4] (S3: tbl_df/tbl/data.frame)
 $ carat  : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
 $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
 $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
 $ price  : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...

Caret Model Training & Performance

The application uses caret::train to fit an ordinary least squares model:

library(caret)

set.seed(123)

fit <- train(price ~ carat + cut + clarity, data = diamonds[1:1000, ], method = “lm”)

fit$results[, c(“RMSE”, “Rsquared”, “MAE”)]

Application Architecture & Links:

Reactive Pipeline: User selections trigger dynamic predictions through the trained caret object.

Embedded Instructions: Guidance documentation is placed directly on the sidebar for novice users.

Access Resources:

Live Shiny App: Deployed on shinyapps.io

Source Code Repository: Available on GitHub (containing ui.R and server.R)

Thank You