Line Production Analysis Report

Introduction

This report presents an analysis of production performance across three production sites of Ahuja Radios:
- Sunwood
- Royal Industries
- Sigma Technologies

The goal is to evaluate productivity, utilization, and the impact of recommended improvements.
The analysis is based on production data (monthly outputs, cycle times, workforce, and utilization).


#
# Internship Project - Line Production Analysis 
# Author: Rijul Bajaj
#
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(scales)
## Warning: package 'scales' was built under R version 4.4.3
# Monthly output and capacity

df<-data.frame(
  site = c("Sunwood", "Royal Industries","Sigma Technologies"),
  avg_monthly_output=c(9000,14000,13500),    # units/month
  monthly_capacity=c(15000,16000,15000),  # capacity/month
  shift_hours=c(200,220,210)      # Total hours per month
)

df$units_per_hour<-df$avg_monthly_output/df$shift_hours
df$utilization_pct<-df$avg_monthly_output/df$monthly_capacity

print(df)
##                 site avg_monthly_output monthly_capacity shift_hours
## 1            Sunwood               9000            15000         200
## 2   Royal Industries              14000            16000         220
## 3 Sigma Technologies              13500            15000         210
##   units_per_hour utilization_pct
## 1       45.00000           0.600
## 2       63.63636           0.875
## 3       64.28571           0.900

Productivity and Utilization (Before)

# Visual Representation
op<-par(mar=c(6,5,4,2)+0.1)
barplot(df$avg_monthly_output,
        names.arg=df$site,
        las=2,   # vertical x labels
        col="skyblue",
        main="Monthly Output By Site",
        ylab="Units Per Month")

bar_heights<-df$utilization_pct*100  # Bar Chart: Utilization % (actual/capacity)
bp<-barplot(bar_heights,
            names.arg=df$site,
            las=2,
            col="lightgreen",
            ylim=c(0,max(120,max(bar_heights)+10)),
            main="Utilization By Site",
            ylab="Utilization (%)")
text(x=bp,y=bar_heights+3,labels=paste0(round(bar_heights,1),"%"),cex=0.9)

# Scatterplot: Output VS Units per Hour

plot(df$units_per_hour,df$avg_monthly_output,
     pch=19, col="black",
     xlab="Units per Hour",
     ylab="Monthly Output",
     main="Output vs Productivity",
     xlim = c(35,80))
text(df$units_per_hour,df$avg_monthly_output,labels=df$site, pos=4, cex=0.9)

# Bar Chart: Distribution of Productivity

barplot(df$units_per_hour,
        names.arg = df$site,
        col = "violet",
        main = "Productivity (Units/Hour) by Site",
        xlab = "Production Site",
        ylab = "Units per Hour")

Improvements Applied

Based on production line observations and utilization levels, the following improvement assumptions were applied to simulate an after scenario:

These assumptions were used to project the after monthly output, productivity, and utilization figures presented in the following analysis.

# AFTER IMPROVEMENT SCENARIO

# Assumed improvements from recommendations (tune as needed)
# Sunwood: +20% (tracking + movers + staggered/rotating lines)
# Royal:   +7%  (live tracking + tighter QA discipline)
# Sigma:   +5%  (already efficient; small balancing + tracking)
improve_pct<-c(0.2,0.07,0.05)

output_after<-round(df$avg_monthly_output*(1+improve_pct))    # Computing After outputs
output_after<-pmin(output_after,df$monthly_capacity)   # can't exceed capacity

units_per_hour_after<-output_after/df$shift_hours   # Computing productivity and utilization AFTER
utilization_after_pct<-(output_after/df$monthly_capacity)*100

Comparison Table: Before vs After

# BEFORE & AFTER Comparison table

comparison<-data.frame(
  site=df$site,
  output_before=df$avg_monthly_output,
  output_after=output_after,
  capacity=df$monthly_capacity,
  hours_month=df$shift_hours,
  units_per_hour_before=round(df$units_per_hour,2),
  units_per_hour_after=round(units_per_hour_after,2),
  utilization_pct_before=round(100*df$utilization_pct,1),
  utilization_pct_after=round(utilization_after_pct,1)
)
cat("\n===BEFOR vs AFTER (from recommendations) ===\n")
## 
## ===BEFOR vs AFTER (from recommendations) ===
print(comparison, row.names = FALSE)
##                site output_before output_after capacity hours_month
##             Sunwood          9000        10800    15000         200
##    Royal Industries         14000        14980    16000         220
##  Sigma Technologies         13500        14175    15000         210
##  units_per_hour_before units_per_hour_after utilization_pct_before
##                  45.00                54.00                   60.0
##                  63.64                68.09                   87.5
##                  64.29                67.50                   90.0
##  utilization_pct_after
##                   72.0
##                   93.6
##                   94.5

Grouped Bar: Monthly Output (Before vs After)

# PLOTS: BEFORE vs AFTER
op2<-par(mar=c(8,5,4,2)+0.1)
mat_out<-rbind(df$avg_monthly_output,output_after)
bp1<-barplot(mat_out,                                   # Grouped Bar: monthly output (Before vs After)
             beside=TRUE,
             names.arg = df$site,
             las=2,
             col=c("lightblue","steelblue"),
             main="Monthly output by site (Before vs After)",
             ylab="units (per month)",
             ylim = c(0,16000))
legend("topleft",fill=c("lightblue","steelblue"),
       legend = c("before","After"),bty = "n")
text(x=bp1,y=mat_out+300,labels=as.character(mat_out),cex=0.8)

Grouped Bar: Utilization % (Before vs After)

# Grouped Bar: Utilization % (Before vs After)
mat_util<-rbind(100*df$utilization_pct,utilization_after_pct)
bp2<-barplot(mat_util,
             beside=TRUE,
             names.arg=df$site,
             las=2,
             col=c("palegreen3","darkgreen"),
             ylim=c(0,max(120,max(mat_util)+10)),
             main="Utilization by Site (Before vs After)",
             ylab = "Utilization (%)")
legend("topleft",fill = c("palegreen3","darkgreen"),
       legend = c("Before","After"),bty="n")
text(x=bp2,y=mat_util+3,labels = paste0(round(mat_util,1),"%"),cex = 0.8)

Scatter: Output vs Units/Hour (Before vs After)

# Scatter: Output vs Units/Hour (Before vs After)
plot(df$units_per_hour,df$avg_monthly_output,
     pch=19,col="tomato",
     xlab="Units per Hour",
     ylab = "Monthly Output",
     main="Output vs Productivity (Before vs After)",
     ylim = c(0,16000),
     xlim = c(45,80))
text(df$units_per_hour,df$avg_monthly_output,labels=df$site,pos = 4,cex = 0.8, col="black")
points(units_per_hour_after,output_after,pch=17,col="royalblue")
text(units_per_hour_after,output_after,pch=17,col="black",labels=df$site,pos=4)
legend("bottomright",pch = c(19,17),col = c("tomato","royalblue"),
       legend=c("Before","After"),bty="n")

par(op2)