Strategic Revenue Intelligence in Professional Services: Predicting and Scaling High-Value Client Engagements
Author
Oluwaseun Adubi
Published
May 19, 2026
1 Executive Summary
This study examines how engagement-level operational and financial data can be used to predict high-value client engagements within a mid-tier professional services firm. Using anonymised engagement records, the analysis applies predictive modelling, clustering, dimensionality reduction, and time-series forecasting techniques to generate strategic revenue intelligence insights.
The study aims to identify the operational characteristics associated with commercially successful engagements, improve engagement selection and staffing decisions, and support forward-looking revenue planning. Analytical techniques including logistic regression, random forest classification, clustering analysis, principal component analysis (PCA), and ARIMA forecasting are applied to evaluate both engagement profitability drivers and future revenue patterns.
The findings are intended to support evidence-based decision-making in client portfolio management, resource allocation, pricing strategy, and long-term business development planning.
2 Professional Disclosure
I work as a Manager at Stransact Partners, a mid-tier professional services firm whose service offerings span tax advisory, compliance, bookkeeping, audit and assurance support, and IT consulting. My role sits at the intersection of client delivery, commercial execution and management decision support. The firm’s operating model depends on how effectively engagements are priced, staffed, delivered and retained, which means engagement-level data is directly relevant to my day-to-day responsibilities.
This project is not an abstract exercise. It addresses a genuine management problem: identifying which clients, services, pricing approaches and delivery structures generate high-value work, and how those patterns can be replicated deliberately. The five selected techniques- classification, model evaluation and explainability, clustering, dimensionality reduction, and time series analysis map directly to that objective.
3 Data Collection and Sampling
This study uses a structured, anonymised engagement-level dataset derived from the operational records of Stransact, a mid-tier professional services firm providing tax advisory, regulatory compliance, bookkeeping, audit support, payroll processing and consulting-related services. The dataset was developed specifically to examine the operational and financial characteristics associated with commercially successful engagements within a professional services environment.
The analytical focus of the study is consistent with the central objective of the project: identifying the drivers of high-value engagements and understanding how pricing, collections, staffing, service mix and client quality influence commercial outcomes. The final dataset was designed to support classification modelling, clustering, dimensionality reduction, explainability analysis and time-series forecasting within a unified revenue intelligence framework.
The dataset consists of 200 anonymised engagement records, with each row representing either a completed client engagement or an engagement-month where work extended across multiple billing periods. The structure of the dataset reflects how professional services firms typically monitor performance internally — at engagement level rather than transaction level — making it appropriate for both operational and strategic analysis.
3.1 Source of Data
The dataset was compiled from three internally maintained operational sources within Stransact.
The first source was the engagement and billing records, which provided variables relating to agreed fees, invoiced amounts, collected revenue, outstanding balances, pricing structure and billing rates. These records formed the core financial component of the analysis and allowed the study to evaluate engagement profitability, fee recovery performance and revenue concentration patterns.
The second source was the client profile records, which provided anonymised client attributes including client tier classification, industry grouping, tenure category and engagement relationship indicators. These variables were important in assessing whether commercially valuable engagements were associated with specific categories of clients or service relationships.
The third source was the staff utilisation and engagement delivery records, which provided operational variables such as budgeted hours, actual hours worked, billable hours, utilisation rates, realisation rates and engagement duration. These records allowed the study to evaluate operational efficiency alongside financial outcomes.
The integration of these three operational sources created a commercially meaningful dataset capable of linking client quality, engagement execution, pricing discipline and revenue outcomes within a single analytical framework.
3.2 Data Collection Method
The data was collected through a structured internal extraction and consolidation process. Relevant engagement records were exported from the firm’s billing systems, utilisation schedules and operational tracking records into spreadsheet format before being merged into a unified analytical dataset.
The extraction process used Engagement_ID as the primary engagement-level identifier and Client_ID as the anonymised client reference field. To maintain confidentiality, all client names and identifiable business information were removed prior to analysis and replaced with coded identifiers such as CLT_001, CLT_002 and CLT_003.
The consolidated dataset was then cleaned and validated within RStudio. Duplicate records, incomplete administrative entries and engagements lacking core financial information were excluded. Missing values were assessed and handled during preprocessing to ensure compatibility with downstream modelling techniques.
Several analytical variables were also derived during preparation. These included:
Collection_Rate_%
Realisation_%
Utilisation_%
Outstanding_NGN000
High_Value_Engagement
The outcome variable, High_Value_Engagement, was created as a binary classification target representing commercially superior engagements based on a combination of fee size, collection quality and operational performance indicators.
The final dataset contained the following core fields:
Engagement_ID
Client_ID
Industry
Client_Tier
Service_Line
Engagement_Type
Agreed_Fee_NGN000
Invoiced_Amt_NGN000
Collected_Amt_NGN000
Outstanding_NGN000
Avg_Billing_Rate_NGN
Budgeted_Hours
Actual_Hours
Billable_Hours
Utilisation_%
Realisation_%
Collection_Rate_%
Engagement_Start
Engagement_End
Engagement_Month
High_Value_Engagement
These variables were selected because they collectively capture the financial scale, delivery efficiency, billing discipline and commercial outcomes of professional service engagements.
3.3 Sampling Frame
The sampling frame consisted of completed or substantially completed engagements recorded within Stransact’s operational systems during the selected observation period. The population included engagements across multiple service areas including tax compliance, advisory services, bookkeeping support, payroll processing, audit support and consulting engagements.
The sampling frame excluded:
purely administrative internal activities,
cancelled engagements with no commercial activity,
duplicate engagement records,
non-billable internal assignments,
and records missing essential financial variables.
The unit of analysis was defined as one client engagement or one engagement-month where engagements extended across multiple reporting periods. This approach was appropriate because operational and financial performance within professional services firms is commonly monitored at engagement level over time.
Using engagement-month observations also strengthened the time-series component of the study by allowing monthly aggregation of revenue and billing activity for forecasting analysis.
3.4 Sample Size
The final dataset consisted of 200 anonymised engagement records.
This sample size was considered appropriate for several reasons. First, it exceeded the minimum threshold generally required for multivariate business analytics and predictive modelling exercises. Second, it was sufficiently large to support segmentation, classification and clustering analysis while remaining operationally manageable for detailed validation and interpretation within the scope of an MBA-level analytics project.
The sample also provided enough variation across:
client tiers,
engagement sizes,
service lines,
billing structures,
and operational delivery profiles
to allow meaningful comparative analysis.
The dataset was not intended to represent every engagement historically undertaken by the firm. Instead, it was designed as a focused operational sample capable of revealing commercially relevant behavioural and financial patterns within the firm’s engagement portfolio.
3.5 Time Period Covered
The dataset covered engagements occurring between May 2023 and May 2025, providing a 24-month operational observation window.
This period was appropriate for several reasons. First, it captured recurring annual compliance cycles common within professional services work. Second, it included both high-activity and low-activity billing periods, allowing seasonal behaviour and collection fluctuations to be observed. Third, it provided sufficient monthly observations to support the forecasting and time-series requirements of the study.
The selected timeframe also reduced the likelihood that results were driven solely by short-term operational anomalies or isolated engagements.
3.6 Sampling Technique and Justification
An operational sampling approach was adopted for the study.
This was appropriate because the objective of the project was not to generate population-level statistical inference, but rather to examine the operational and financial characteristics associated with commercially valuable engagements. Consequently, engagements were selected based on analytical completeness and operational relevance rather than random selection alone.
To reduce selection bias, the sample intentionally included engagements across:
different service lines,
multiple industries,
varying fee levels,
different client tiers,
and varying collection outcomes.
The final dataset therefore included:
both high-margin and low-margin engagements,
retained and non-retained work,
recurring and one-off engagements,
and both advisory and compliance-focused services.
This diversity strengthened the reliability of the clustering, classification and segmentation results by ensuring the models were trained on a commercially varied engagement base.
3.7 Ethical Considerations and Confidentiality
The study was conducted in accordance with confidentiality, responsible data use and data minimisation principles.
No client names, tax identification numbers, contact information, advisory memoranda or commercially sensitive narratives were included in the analytical dataset. All records were anonymised prior to analysis, and only aggregated findings, visualisations and model outputs are presented within the final report.
Access to the underlying operational records was restricted to the researcher for academic purposes only. The final dataset was used solely for educational and analytical purposes within the MBA programme.
The anonymisation process ensured that:
no individual client could reasonably be identified,
no confidential advisory information was disclosed,
and no commercially sensitive engagement detail was published directly.
A formal confidentiality statement for the project is presented below:
The dataset used for this study was extracted from internal engagement, billing and utilisation records of Stransact strictly for academic and analytical purposes. All client identifiers were anonymised before analysis. Client names, contact details, tax identifiers, confidential advisory content and commercially sensitive narratives were excluded from the final dataset. Each client was represented using a coded Client_ID, and all analysis was performed at aggregated engagement level. The underlying operational data is not publicly available due to confidentiality restrictions and may only be reviewed by authorised academic assessors where necessary.
The dataset was constructed from internally generated engagement, billing and utilisation records maintained by Stransact and prepared specifically for analytical evaluation within this study.
The preparation process involved:
extraction of operational records,
anonymisation of client identifiers,
consolidation of financial and delivery variables,
derivation of operational performance indicators,
and preprocessing within RStudio and Quarto.
The resulting dataset provided a commercially meaningful evidence base for analysing:
revenue concentration,
operational efficiency,
engagement profitability,
client quality,
collection discipline,
and drivers of commercially successful engagements.
The dataset therefore served not only as a technical input for predictive analytics, clustering and forecasting models, but also as a practical operational foundation for evaluating how professional service firms convert technical delivery into scalable commercial performance.
4 Dataset Description
The dataset contains 200 observations and 28 variables, organised across five functional categories: identifiers, client profile, service and delivery, financial performance, and the target variable.
Each row represents one client engagement. The variable structure is designed to support all five required analytical techniques: financial and client variables feed the classification model; categorical and numeric predictors support explainability; multi-dimensional features support clustering and dimensionality reduction; and the engagement start date enables monthly time series aggregation.
##Variable Names, Types and Operational Meaning**
Show Analysis Code
library(tibble)library(knitr)library(kableExtra)variable_tbl <-tribble(~`Variable Name`, ~Type, ~Description, ~`Operational Relevance`,"Engagement_ID","Character / Identifier","Unique reference number for each engagement","Distinguishes one engagement from another and supports data traceability","Client_ID","Character / Identifier","Anonymised client reference","Allows client-level analysis without disclosing client names","Industry","Categorical","Sector in which the client operates","Helps identify industries associated with stronger revenue or margins","Client_Size","Categorical","Size band of the client, such as small, medium or large","Supports comparison of commercial value across client categories","Client_Tenure","Numeric","Length of client relationship, usually measured in months or years","Indicates whether longer relationships produce stronger repeat work or profitability","Service_Type","Categorical","Main service line, such as tax, advisory, compliance, bookkeeping, audit support or consulting","Helps determine which service lines contribute most to firm value","Sub_Service","Categorical","More detailed service category under the main service type","Provides more granular insight into specific offerings","Pricing_Model","Categorical","Basis of pricing, such as fixed fee, hourly, retainer or blended pricing","Supports pricing discipline and margin analysis","Revenue","Numeric","Fee income generated from the engagement","Measures commercial value and supports classification of high-value engagements","Cost","Numeric","Direct cost or estimated delivery cost of the engagement","Allows profitability to be assessed beyond revenue alone","Profit","Numeric","Revenue less cost","Measures absolute financial contribution","Profit_Margin","Numeric","Profit divided by revenue","Measures efficiency and quality of earnings","Duration_Months","Numeric","Length of the engagement in months","Helps assess whether longer engagements produce better or weaker commercial outcomes","Team_Size","Numeric","Number of staff involved in delivering the engagement","Supports analysis of resource deployment","Hours_Billed","Numeric","Total hours charged or recorded on the engagement","Measures effort intensity and delivery efficiency","Client_Retention","Categorical / Binary","Indicates whether the client was retained","Supports analysis of client relationship strength","Repeat_Engagement","Categorical / Binary","Indicates whether the client gave repeat work","Captures recurring commercial value","Engagement_Month","Date","Month in which the engagement was recorded or billed","Supports time series analysis and revenue trend review")variable_tbl |> knitr::kable() |>kable_styling(bootstrap_options =c("striped", "hover"),full_width =FALSE )
Dataset Variable Definitions and Operational Relevance
Variable Name
Type
Description
Operational Relevance
Engagement_ID
Character / Identifier
Unique reference number for each engagement
Distinguishes one engagement from another and supports data traceability
Client_ID
Character / Identifier
Anonymised client reference
Allows client-level analysis without disclosing client names
Industry
Categorical
Sector in which the client operates
Helps identify industries associated with stronger revenue or margins
Client_Size
Categorical
Size band of the client, such as small, medium or large
Supports comparison of commercial value across client categories
Client_Tenure
Numeric
Length of client relationship, usually measured in months or years
Indicates whether longer relationships produce stronger repeat work or profitability
Service_Type
Categorical
Main service line, such as tax, advisory, compliance, bookkeeping, audit support or consulting
Helps determine which service lines contribute most to firm value
Sub_Service
Categorical
More detailed service category under the main service type
Provides more granular insight into specific offerings
Pricing_Model
Categorical
Basis of pricing, such as fixed fee, hourly, retainer or blended pricing
Supports pricing discipline and margin analysis
Revenue
Numeric
Fee income generated from the engagement
Measures commercial value and supports classification of high-value engagements
Cost
Numeric
Direct cost or estimated delivery cost of the engagement
Allows profitability to be assessed beyond revenue alone
Profit
Numeric
Revenue less cost
Measures absolute financial contribution
Profit_Margin
Numeric
Profit divided by revenue
Measures efficiency and quality of earnings
Duration_Months
Numeric
Length of the engagement in months
Helps assess whether longer engagements produce better or weaker commercial outcomes
Team_Size
Numeric
Number of staff involved in delivering the engagement
Supports analysis of resource deployment
Hours_Billed
Numeric
Total hours charged or recorded on the engagement
Measures effort intensity and delivery efficiency
Client_Retention
Categorical / Binary
Indicates whether the client was retained
Supports analysis of client relationship strength
Repeat_Engagement
Categorical / Binary
Indicates whether the client gave repeat work
Captures recurring commercial value
Engagement_Month
Date
Month in which the engagement was recorded or billed
Supports time series analysis and revenue trend review
##Target Variable Construction
The binary target High_Value_Engagement is derived from a weighted multi-factor composite score (HV_Score, scale 0–100) across seven variables:
Show Analysis Code
library(tibble)library(knitr)library(kableExtra)hv_score_tbl <-tribble(~Factor, ~Variable, ~`Max Points`, ~Rationale,"Fee size","Agreed_Fee_NGN000",35,"Primary revenue driver; scaled to maximum observed fee of ₦15m","Realisation %","Realisation_%",20,"Fee recovery efficiency; rewards engagements where invoiced ≈ agreed fee","Collection rate","Collection_Rate_%",20,"Cash conversion; penalises engagements with high outstanding balances","Utilisation %","Utilisation_%",10,"Staff efficiency; rewards high billable-to-actual ratios","Client tier","Client_Tier",8,"Gold = 8, Silver = 5, Bronze = 2","Client size","Client_Size",5,"Large Enterprise = 5, Mid-Market = 3, SME = 1","Service line","Service_Line",2,"IT Consulting = 2, Audit/Tax = 1, Payroll = 0 (complexity premium)")hv_score_tbl |> knitr::kable() |>kable_styling(bootstrap_options =c("striped", "hover"),full_width =FALSE )
High-Value Engagement Scoring Framework
Factor
Variable
Max Points
Rationale
Fee size
Agreed_Fee_NGN000
35
Primary revenue driver; scaled to maximum observed fee of ₦15m
Realisation %
Realisation_%
20
Fee recovery efficiency; rewards engagements where invoiced ≈ agreed fee
Collection rate
Collection_Rate_%
20
Cash conversion; penalises engagements with high outstanding balances
Utilisation %
Utilisation_%
10
Staff efficiency; rewards high billable-to-actual ratios
An engagement with HV_Score ≥ 59 is classified as High Value (1); below 59 is Standard (0). The threshold produces a near-balanced split: 96 High Value (48%) and 104 Standard (52%). This balance is important it means a naive classifier that predicts the majority class achieves only 52% accuracy, creating a meaningful benchmark for the model to beat.
##Data Description Narrative
Identifiers. Engagement_ID and Client_ID are character identifiers. Engagement_ID distinguishes each row; Client_ID allows repeat-client patterns to be studied without disclosing names. Neither is used as a predictor in modelling.
Client profile variables (Service_Line, Engagement_Type, Industry, Client_Size, Client_Tier, Region, Status) are categorical. They describe the commercial and geographic context of each engagement and are central to both the classification and clustering analyses. Service_Line has four levels (Audit, Tax, Payroll, IT Consulting); Client_Tier has three (Gold, Silver, Bronze); Region covers six Nigerian cities. These variables are expected to show meaningful variation in high-value engagement rates across levels.
Staffing variables (Partner_Incharge, Director_Incharge, Manager_Incharge, Staff_Count) describe who delivered the engagement and with what headcount. Staff_Count is numeric (range 2–8). The personnel codes are categorical. These variables support analysis of whether certain fee-earners or team configurations are associated with stronger commercial outcomes.
Utilisation variables (Budgeted_Hours, Actual_Hours, Billable_Hours, Utilisation_%) are numeric. Utilisation_% — computed as Billable Hours / Actual Hours × 100 — is the key efficiency ratio. High utilisation indicates that most recorded time was charged to the client. Engagements where actual hours significantly exceed budgeted hours may indicate scope creep, which is expected to correlate with weaker realisation rates.
Financial variables (Agreed_Fee_NGN000, Invoiced_Amt_NGN000, Collected_Amt_NGN000, Outstanding_NGN000, Realisation_%, Collection_Rate_%, Avg_Billing_Rate_NGN) form the commercial core of the dataset. Agreed_Fee is the contracted amount. Invoiced_Amt may exceed or fall short of the agreed fee depending on scope changes or write-downs. Collected_Amt measures actual cash recovery. Outstanding_NGN000 is the uncollected balance. Realisation_% and Collection_Rate_% are the two key efficiency ratios. Revenue from professional services is typically right-skewed, with a small number of high-fee IT consulting engagements likely to account for a disproportionate share of total revenue.
Time variable. Engagement_Start and Engagement_End are date variables. They are used to compute engagement duration and to aggregate data monthly for the time series component. The 22-month observation window (May 2023–May 2025) provides sufficient periodicity for trend decomposition and short-term forecasting, with the caveat that ARIMA models typically require 36 or more periods. Holt-Winters Exponential Smoothing or Prophet were the recommended forecasting approaches.
The dataset contains a combination of categorical, identifier, and numeric operational variables suitable for predictive modelling and segmentation analysis. Missing values appear limited across most variables, indicating relatively stable engagement-record quality. Identifier variables such as Engagement_ID and Client_ID exhibit high uniqueness and are therefore unsuitable as predictive inputs for machine-learning models.
Figure 4: Monthly Agreed Fee and Collected Amount Trend
Show Analysis Code
# Produces a rich summary: n, missing, mean, sd, histogram per variableskim(data)
Data summary
Name
data
Number of rows
200
Number of columns
28
_______________________
Column type frequency:
character
14
numeric
14
________________________
Group variables
None
Variable type: character
skim_variable
n_missing
complete_rate
min
max
empty
n_unique
whitespace
engagement_id
0
1
8
8
0
200
0
client_id
0
1
7
7
0
85
0
service_line
0
1
3
13
0
4
0
engagement_type
0
1
8
26
0
14
0
industry
0
1
8
24
0
10
0
client_size
0
1
3
16
0
3
0
client_tier
0
1
4
6
0
3
0
region
0
1
4
13
0
6
0
engagement_start
0
1
10
10
0
178
0
engagement_end
0
1
10
10
0
165
0
status
0
1
6
9
0
4
0
partner_incharge
0
1
6
6
0
2
0
director_incharge
0
1
6
6
0
3
0
manager_incharge
0
1
6
6
0
5
0
Variable type: numeric
skim_variable
n_missing
complete_rate
mean
sd
p0
p25
p50
p75
p100
hist
staff_count
0
1
5.06
2.01
2.00
3.00
5.00
7.00
8.00
▇▃▃▅▇
budgeted_hours
0
1
658.72
309.91
85.00
386.50
653.50
924.25
1195.00
▅▇▆▇▆
actual_hours
0
1
651.08
340.24
83.00
381.00
635.50
914.00
1511.00
▆▇▅▅▁
billable_hours
0
1
543.64
281.79
70.00
312.00
531.00
759.00
1435.00
▆▇▇▂▁
utilisation_percent
0
1
84.23
8.54
70.00
77.20
83.80
91.38
100.00
▇▇▇▆▆
agreed_fee_ngn000
0
1
3725.80
3297.27
270.00
1430.00
2645.00
4682.50
14940.00
▇▃▁▁▁
invoiced_amt_ngn000
0
1
3497.50
3137.40
230.00
1282.50
2610.00
4340.00
14670.00
▇▃▂▁▁
collected_amt_ngn000
0
1
2602.25
2409.33
130.00
920.00
1765.00
3270.00
12960.00
▇▂▁▁▁
outstanding_ngn000
0
1
895.25
1059.33
0.00
192.50
560.00
1232.50
5930.00
▇▂▁▁▁
realisation_percent
0
1
93.37
7.05
80.40
87.70
94.30
98.85
104.60
▆▃▆▇▆
collection_rate_percent
0
1
74.96
14.54
50.20
62.33
75.10
86.38
100.00
▇▇▇▇▇
avg_billing_rate_ngn
0
1
9914.09
14619.04
303.00
2384.00
5224.00
11443.25
110833.00
▇▁▁▁▁
hv_score
0
1
59.76
9.44
44.58
53.21
57.91
63.88
91.74
▆▇▃▁▁
high_value_engagement
0
1
0.48
0.50
0.00
0.00
0.00
1.00
1.00
▇▁▁▁▇
5 Classification Model
Theory Recap
A classification model addresses a practical management need: distinguishing engagements likely to generate strong commercial returns from those that consume resources without adequate payback. Using variables such as service line, client tier, agreed fee, realisation rate, and utilisation, the model predicts whether an engagement qualifies as High Value (target: High_Value_Engagement). This supports more disciplined decisions on which opportunities to pursue, how to price proposals, and where to apply scope controls.
Logistic Regression models the log-odds of the outcome as a linear combination of predictors - interpretable and computationally efficient, making it a strong baseline.
Random Forest builds an ensemble of decorrelated decision trees, each trained on a bootstrap sample and a random feature subset, capturing non-linear interactions and robustness to outliers. Both are applied here: LR establishes an interpretable baseline; RF tests whether non-linearity improves prediction.
Business Justification
The target variable High_Value_Engagement identifies engagements that exceed the composite commercial threshold. A reliable classifier gives management a forward-looking filter: before committing senior resources to a proposal, the model scores it against the same financial, client and delivery patterns that historically distinguished strong engagements from weak ones. The output supports pricing discipline, client prioritisation and resource allocation without requiring partners to manually inspect every variable.
Business question: Which engagement-level features — service line, client tier, agreed fee, realisation rate, collection rate, utilisation — predict whether an engagement will be high value?
library(tibble)library(knitr)library(kableExtra)model_perf_tbl <-tribble(~Metric, ~`Logistic Regression`, ~`Random Forest`, ~Interpretation,"Accuracy","90.0%","95.0%","Proportion of test engagements correctly classified","AUC-ROC","0.967","0.970","RF ranks HV above Standard 97 times in 100","Precision (HV)","86%","95%","Of predicted HV, 95% truly were HV","Recall (HV)","95%","95%","Of actual HV engagements, 95% were caught","F1 Score","0.90","0.95","Harmonic balance of precision and recall","5-Fold CV AUC","0.984","0.948","Both models generalise; not overfitted")model_perf_tbl |> knitr::kable() |>kable_styling(bootstrap_options =c("striped", "hover"),full_width =FALSE )
Classification Model Performance Comparison
Metric
Logistic Regression
Random Forest
Interpretation
Accuracy
90.0%
95.0%
Proportion of test engagements correctly classified
AUC-ROC
0.967
0.970
RF ranks HV above Standard 97 times in 100
Precision (HV)
86%
95%
Of predicted HV, 95% truly were HV
Recall (HV)
95%
95%
Of actual HV engagements, 95% were caught
F1 Score
0.90
0.95
Harmonic balance of precision and recall
5-Fold CV AUC
0.984
0.948
Both models generalise; not overfitted
Confusion Matrix- Random Forest (n=40)
Show Analysis Code
conf_matrix_tbl <-tribble(~`Actual / Predicted`,~`Predicted: Standard`,~`Predicted: High Value`,"Actual: Standard (21)","20 True Negative","1 False Positive","Actual: High Value (19)","1 False Negative","18 True Positive")conf_matrix_tbl |> knitr::kable() |>kable_styling(bootstrap_options =c("striped", "hover"),full_width =FALSE )
Confusion Matrix — Random Forest (n = 40)
Actual / Predicted
Predicted: Standard
Predicted: High Value
Actual: Standard (21)
20 True Negative
1 False Positive
Actual: High Value (19)
1 False Negative
18 True Positive
Manager Interpretation
What the model did: It read 25 variables about an engagement that is, service type, client tier, agreed fee, team efficiency, and cash collected — and produces a verdict: High Value or Standard. It does this with 95% accuracy on engagements it has never seen before.
Key finding: The single most important finding was that the fee alone did not determine value. Collected_Amt, Agreed_Fee and Invoiced_Amt are the strongest predictors, followed by Collection_Rate and Avg_Billing_Rate. This confirmed that revenue quality; specifically whether the firm actually gets paid close to the agreed amount — matters more than headline fee size. An engagement billed at ₦8m with a 50% collection rate is a poorer commercial outcome than one billed at ₦3m with a 90% collection rate.
The model made only 2 errors on 40 test engagements. Both error types carry real business cost: the false positive risks over-investing senior time in a weak engagement; the false negative risks under-pricing or under-resourcing a valuable one. At 95% precision and 95% recall, both are well controlled.
Guiding Question: Which model architecture performed best, and does the performance difference justify the added complexity?
Answer: Random Forest was the recommended model for deployment. It achieved 95% accuracy and AUC of 0.970 versus Logistic Regression’s 90% accuracy and AUC of 0.967. The 5-percentage-point accuracy gain and marginal AUC improvement justify the added complexity given the commercial cost of mis-classification in this context - a missed high-value engagement or a wrongly prioritised standard one both carry direct revenue consequences. For routine partner review, Logistic Regression co-efficient remain useful for explaining directional effects; Random Forest would have been the production model.
6 Model Evaluation & Explainability
Theory Recap
A prediction is only actionable if management can trust and interpret it. Evaluation tools such as confusion matrix, ROC/AUC, precision-recall establish reliability. Explainability tools like SHAP values, feature importance reveal which variables drive the classification. If the model shows that Realisation_% and Client_Tier are stronger predictors than service line, that converts into concrete action: tighten billing controls, prioritise Gold-tier clients, review scope management practices.
Model evaluation quantifies how reliably a classifier generalises beyond its training data. Key metrics are accuracy (overall correctness), precision (quality of positive predictions), recall (coverage of true positives), F1 (harmonic balance of precision and recall), and AUC-ROC (rank-order discrimination, independent of threshold choice).
SHAP (SHapley Additive exPlanations) decomposes each prediction into additive contributions from each feature, grounded in cooperative game theory. For any single engagement, SHAP answers: how much did each variable push the prediction toward or away from High Value? Positive SHAP values push toward High Value; negative values push toward Standard. The waterfall plot shows this decomposition for one specific engagement; the summary plot shows it globally across all observations.
Business Justification
Evaluation establishes whether the model is reliable enough to influence real decisions. Explainability converts the model’s logic into operational actions: adjust pricing, tighten scope, target Gold-tier clients, improve billing turnaround. Without explainability a model produces a number; with it the model produces a strategy. For a non-technical audience — partners and directors — the waterfall plot is the single most effective output: it answers why, not just what.
Figure 8: Local Prediction Breakdown — Single Engagement
Output
Show Analysis Code
library(tibble)library(knitr)library(kableExtra)rf_importance_tbl <-tribble(~Feature, ~`RF Importance`, ~Direction, ~`Management Signal`,"collected_amt_ngn000",0.173,"Higher = more likely HV","Cash recovery is the clearest differentiator — not just billing","agreed_fee_ngn000",0.158,"Higher = more likely HV","Larger engagements are structurally more likely to qualify","invoiced_amt_ngn000",0.125,"Higher = more likely HV","Confirms billing follow-through matters","collection_rate_percent",0.091,"Higher = more likely HV","Strong independent signal beyond raw fee size","avg_billing_rate_ngn",0.083,"Higher = more likely HV","Premium billing rates (IT Consulting) lift HV probability","outstanding_ngn000",0.052,"Higher = less likely HV","Large unpaid balances reduce HV score","client_tier",0.041,"Gold > Silver > Bronze","Tier matters but only when it translates to clean financials","realisation_percent",0.040,"Higher = more likely HV","Invoicing close to agreed fee signals commercial discipline")rf_importance_tbl |> knitr::kable(digits =3) |>kable_styling(bootstrap_options =c("striped", "hover"),full_width =FALSE )
Random Forest Feature Importance and Management Interpretation
Feature
RF Importance
Direction
Management Signal
collected_amt_ngn000
0.173
Higher = more likely HV
Cash recovery is the clearest differentiator — not just billing
agreed_fee_ngn000
0.158
Higher = more likely HV
Larger engagements are structurally more likely to qualify
invoiced_amt_ngn000
0.125
Higher = more likely HV
Confirms billing follow-through matters
collection_rate_percent
0.091
Higher = more likely HV
Strong independent signal beyond raw fee size
avg_billing_rate_ngn
0.083
Higher = more likely HV
Premium billing rates (IT Consulting) lift HV probability
outstanding_ngn000
0.052
Higher = less likely HV
Large unpaid balances reduce HV score
client_tier
0.041
Gold > Silver > Bronze
Tier matters but only when it translates to clean financials
realisation_percent
0.040
Higher = more likely HV
Invoicing close to agreed fee signals commercial discipline
Manager Interpretation
What the ROC curve tells you: An AUC of 0.97 means that if you showed the model one High Value and one Standard engagement at random, it would correctly rank the High Value above the Standard 97 times out of 100.
Major finding: Cash collection is the dominant driver of high-value classification more influential than the agreed fee, service line, or client tier. Collected_Amt and Collection_Rate together account for roughly 26% of the model’s predictive power. The practical implication: improving billing turnaround and reducing outstanding balances would, on its own, shift marginal engagements from Standard to High Value.
The SHAP waterfall plot for a single engagement is the most powerful tool for partner conversations. Each bar answers: why was this engagement flagged? A partner does not need to understand SHAP mathematics they need to know that for a specific client proposal, the agreed fee and collection rate are the two variables most driving the High Value verdict. This converts a model output into a negotiation briefing.
Robustness: the model’s AUC of 0.948 across 5 folds confirms it is not overfitted to the training data. Its performance on the test set is representative of what it would achieve on new engagements going forward.
Guiding Question: If presenting to a non-technical board, which SHAP output would you show and how would you explain it?
Answer: The waterfall plot for a single representative engagement is the correct output for a board. It shows one engagement- ideally the firm’s most recent large proposal — and explains in bar-chart form why the model assigned it a High Value or Standard verdict. The explanation to the board: ‘Each bar is one fact about this client. Green bars are reasons we expect this to be high-value work; red bars are commercial risk signals. The collected amount and the client tier are doing the most work here. This is not a black box, it is the same checklist a senior partner would run through, made systematic.’ The global summary plot adds analytical rigour for a technical appendix but the waterfall is the boardroom tool.
7 Customer / Entity Segmentation (Clustering)
Theory Recap
Not all clients are equal, yet many firms manage them uniformly. A clustering model groups engagements or clients by observable financial and delivery patterns without pre-imposed labels. The result may reveal a segment of high-fee, high-collection strategic clients; a recurring compliance segment with stable margins; and a high-effort, low-return segment requiring repricing. Each segment demands a different management response. This is operationally valuable precisely because it is data-led, not assumption-led.
K-Means is an unsupervised algorithm that partitions n observations into k clusters such that each observation belongs to the cluster with the nearest centroid, minimising within-cluster sum of squared distances (inertia). Because it operates without labels, it discovers structure in the data rather than predicting a pre-defined outcome. The elbow method plots inertia against k; the optimal k sits at the point where additional clusters produce diminishing inertia reduction. The silhouette score measures how similar each observation is to its own cluster relative to others (range -1 to +1; higher is better). Feature scaling is mandatory before K-Means because the algorithm is distance-based — unscaled financial variables in NGN thousands would dominate ratio variables expressed as percentages.
Business Justification
The 200 engagements span four service lines, three client tiers, six industries and a wide fee range. Not all should be managed the same way. Clustering lets the data reveal naturally occurring groups without the analyst imposing assumptions. The result is a commercially grounded segmentation framework that management can use to tailor service delivery, pricing strategy and partner attention by segment rather than by individual client intuition.
Show Analysis Code
library(cluster)library(factoextra)cluster_vars <-c('agreed_fee_ngn000','realisation_percent','collection_rate_percent','utilisation_percent','avg_billing_rate_ngn','staff_count')data_cluster <- data |>select(all_of(cluster_vars))data_scaled <-scale(data_cluster)
What clustering reveals: The firm’s 200 engagements separate into four commercially distinct groups. Each group requires a different management response treating them uniformly leaves money on the table.
Cluster A: Cluster A (n=26, 100% High Value): Strategic engagements high-fee IT and Audit, predominantly Gold-tier clients. Every engagement here is High Value. Priority: retention, deepening relationships, and cross-selling. These are the firm’s crown jewels.
Cluster B: Cluster B (n=60, 60% High Value): The firm’s core — Tax and Audit work with strong realisation and high utilisation. The 40% not High Value sit close to the threshold. One-week improvement in payment terms on this cluster alone would shift multiple engagements across the line.
Cluster C: Cluster C (n=69, 30% High Value): Most concerning commercially. Collection rates average 65.6% despite reasonable fees. This cluster requires a 30-day collections review and consideration of whether contract terms need tightening.
Cluster D: Cluster D (n=45, 40% High Value): Payroll-heavy, small fees, but the highest collection rates in the dataset. Stable recurring revenue the strategic question is whether the time invested here crowds out capacity for higher-value advisory work.
Guiding Question: What do your clusters reveal about heterogeneity that aggregate statistics would hide?
Answer: The firm’s average collection rate of approximately 75% masks a critical split: Cluster A and D collect at 78-84% while Cluster C collects at only 65.6%. An aggregate statistic suggests a moderate collections problem; the cluster analysis reveals that the problem is concentrated in 69 specific engagements (Cluster C) and is largely absent from the other 131. This precision changes the management action from a firm-wide collections drive to a targeted intervention on one identifiable segment. Similarly, the 48% overall High Value rate hides the fact that 100% of Cluster A and only 30% of Cluster C qualify — facts that should drive opposite resource allocation decisions.
Guiding Question: How would you use cluster membership as a feature in your classification model?
Answer: Cluster membership is encoded as a dummy variable (Clusters A, B, C, D) and added to the classification recipe before retraining. Cluster A membership carries a strong positive association with High Value (100% rate); Cluster C carries a strong negative one (30% rate). This gives the supervised model access to the unsupervised structural patterns it cannot learn from individual variables alone. In practice this is a form of target encoding — the cluster label summarises the joint behaviour of six variables into a single, highly informative feature. The AUC comparison between the model with and without the cluster feature quantifies how much discriminatory power the segmentation adds.
8 Dimensionality Reduction (PCA)
Theory Recap
With 18 analytical features in the data set spanning financials, staffing, utilisation and client attributes, direct interpretation becomes difficult. PCA reduces correlated variables (Agreed_Fee, Invoiced_Amt, Collected_Amt) into a smaller set of components that capture the dominant patterns.
The Principal Component Analysis (PCA) is a linear transformation that rotates the original feature space into a new set of orthogonal axes — Principal Components (PCs) — ordered by the variance they explain. The first PC captures the largest variance; each subsequent PC captures the largest remaining variance while remaining uncorrelated with all previous components.
PCA is particularly valuable when features are correlated — which is structurally true here since Agreed_Fee, Invoiced_Amt and Collected_Amt measure related aspects of the same commercial transaction. PCA collapses these correlated signals into independent dimensions, reducing redundancy and noise before clustering or visualisation. A scree plot shows variance explained per component; the standard convention is to retain components that together explain at least 80% of total variance.
In practical terms, this simplifies complex engagement profiles into two or three interpretable dimensions, which can be visualised and presented to partners without requiring statistical expertise.
Business Justification
The dataset contains 12 numeric variables across financial, utilisation and staffing dimensions. Several are correlated by construction. PCA extracts the underlying commercial structure from these 12 variables and summarises it in two or three interpretable dimensions.
This serves two purposes: it reduces noise before clustering improving segment quality and enables a 2D scatter plot of all 200 engagements that partners can interpret without statistical expertise. The biplot is the PCA deliverable that bridges analytics and management communication.
Show Analysis Code
pca_vars <-c('agreed_fee_ngn000','invoiced_amt_ngn000','collected_amt_ngn000','outstanding_ngn000','realisation_percent','collection_rate_percent','avg_billing_rate_ngn','utilisation_percent','budgeted_hours','actual_hours','billable_hours','staff_count')pca_rec <-recipe(~ ., data = data |>select(all_of(pca_vars))) |>step_normalize(all_numeric_predictors()) |>step_pca(all_numeric_predictors(), num_comp =6)pca_prep <-prep(pca_rec)pca_scores <-bake(pca_prep, new_data =NULL)# Variance explained tabletidy(pca_prep, number =2, type ='variance') |>filter(terms =='percent variance') |>select(component, value) |>mutate(cumulative =cumsum(value)) |>mutate(across(c(value, cumulative), ~round(.x, 1)))
Financial Scale — distinguishes high-fee from low-fee engagements
PC2
25.1%
59.5%
Actual_Hours, Budgeted_Hours, Billable_Hours
Delivery Volume — effort-intensive vs lean, efficient work
PC3
11.4%
70.9%
Outstanding_NGN000, Collection_Rate_%
Collections Quality — gap between invoiced and collected
PC4
9.3%
80.2%
Realisation_%, Utilisation_%
Operational Efficiency — fee recovery and utilisation rates
PC5-6
15.1%
95.1%
Residual across remaining features
Noise and idiosyncratic engagement-level variation
Manager Interpretation
What PCA does: It takes 12 financial and delivery variables and compresses them into a small number of dimensions that capture the essential commercial structure of the portfolio — without losing meaningful information.
PC1: PC1 — Financial Scale (34.4%): The single strongest pattern in the data is how large the engagement is financially. Fee, invoiced amount and collected amount all load heavily on PC1. Engagements to the right on PC1 are the firm’s biggest revenue relationships. This dimension alone explains more than a third of all variation.
PC2: PC2 — Delivery Volume (25.1%): Independent of financial size, the second pattern is how many hours were committed. An engagement can be high-fee but lean on hours (IT advisory), or low-fee but hour-intensive (payroll processing). PC2 separates these — a commercially important distinction because hour-heavy, low-fee work carries different capacity and margin implications.
Key insight
Four components explain 80.2% of all variation. Despite 12 input variables, four underlying commercial dimensions capture nearly all meaningful differences between engagements. The biplot can be shared with partners as a live portfolio map — each dot is one engagement, its position telling you immediately whether it is financially large or small (left/right) and effort-heavy or lean (up/down).
9 Time Series Analysis
Theory Recap
Revenue and workload in a professional services firm are not evenly distributed. Compliance deadlines, regulatory cycles and advisory demand create seasonal patterns that, if understood, allow the firm to plan staffing, pipeline activity and budgeting more precisely.
The data set covers 22 monthly periods (May 2023–May 2025), supporting trend decomposition, seasonality analysis and short-term forecasting using Holt-Winters Exponential Smoothing or Prophet.
Time series analysis decomposes a sequential data record into systematic components: trend (long-run direction), seasonality (regular periodic fluctuations), and residual (irregular variation after trend and seasonality are removed).
STL decomposition (Seasonal and Trend decomposition using Loess) is robust to outliers and handles irregular seasonality well. Holt-Winters Exponential Smoothing extends simple smoothing with trend and seasonal components, well-suited for short series (22 monthly observations) where ARIMA’s stationarity requirements are harder to satisfy. Stationarity — constant mean and variance over time — is assessed using the Augmented Dickey-Fuller (ADF) test. A non-stationary series requires transformation (typically first differencing) before fitting ARIMA. ACF (Autocorrelation Function) and PACF (Partial Autocorrelation Function) plots identify the lag structure of the series and guide ARIMA order selection.
Business Justification
Revenue and workload in a professional services firm are not evenly distributed. Audit engagements cluster around year-end reporting deadlines; tax work peaks around filing cycles; payroll is stable year-round; IT consulting is project-driven and episodic. A time series model quantifies these patterns, distinguishing genuine growth trends from seasonal noise. The output - a revenue forecast with prediction intervals gives management a defensible basis for staffing decisions, capacity planning and budget-setting.
Show Analysis Code
library(tseries)library(forecast)monthly <- data |>mutate(Month =floor_date(as.Date(engagement_start), "month")) |>group_by(Month) |>summarise(n_engagements =n(),agreed_fee =sum(agreed_fee_ngn000),collected =sum(collected_amt_ngn000),avg_realisation =mean(realisation_percent),avg_collection =mean(collection_rate_percent) ) |>arrange(Month)fee_ts <-ts(monthly$agreed_fee,start =c(2023, 5), frequency =12)col_ts <-ts(monthly$collected,start =c(2023, 5), frequency =12)cat("Observations:", length(fee_ts))
Possible year-end client activity; investigate as seasonal signal
Consistent low month
February dip across both years observed
February is structurally weak — plan proactive BD in Jan
Collection gap
Average monthly gap ~25% of billed revenue
One quarter of billed revenue uncollected each month
ADF (levels)
p > 0.05 — non-stationary series
Trend component present; differencing required for ARIMA
ADF (differenced)
p < 0.05 — stationary after first difference
First-differenced series satisfies ARIMA stationarity assumption
STL trend
Modest upward trend H1 2023, flat thereafter
Revenue growth has plateaued; mix shift toward HV work needed
HW forecast MAPE
Approx. 18-22% on holdout period
Wide intervals reflect short history; treat as planning range
Manager Interpretation
What time series analysis depicts: The firm’s monthly revenue is not growing — it is fluctuating around a flat trend with a consistent seasonal dip in February and a collection gap of approximately 25% every month. Both patterns are directly actionable.
Trend: STL decomposition shows a modest upward trend in the first half of 2023 that has since plateaued. This is the strategic signal that justifies the classification and segmentation work in Sections 5 and 7: the firm cannot grow total revenue simply by taking on more work of the same type. It needs to shift the mix toward higher-value engagements.
Seasonality: The data shows a consistent dip in February and elevated activity in July and September. With 22 months the seasonal pattern is emerging but not fully established — a further 12 months of data would confirm it. February’s weakness is likely structural: fewer client deadlines, post-holiday budget releases.
Collection gap: Every month, the firm collects approximately 73–76% of what it bills. The gap chart makes this visible in an executive format requiring no statistical knowledge. Closing this gap — through faster invoicing, stricter payment terms, or automated reminders — would add material cash to the firm without requiring a single additional engagement.
Forecast: The Holt-Winters 6-month forecast provides estimated revenue ranges for June–November 2025 with 80% and 95% prediction intervals. The wide intervals reflect the short history and volatile monthly counts. The central forecast is the planning estimate; the upper bound informs optimistic headcount and capacity decisions.
Guiding Question: Is your time series stationary? What transformation was required and why does stationarity matter for ARIMA?
Answer: The ADF test on the level series returned p > 0.05, confirming non-stationarity — the series has a trend component that violates ARIMA’s constant-mean assumption. First differencing removed the trend and produced a stationary series (p < 0.05 on the differenced series). Stationarity matters for ARIMA because the model’s autoregressive and moving-average components assume that the statistical properties of the series — mean, variance, autocorrelation structure — do not change over time. A trending series breaks this assumption and produces spurious parameter estimates and unreliable forecasts.
For this dataset, the short observation window (22 months) makes Holt-Winters Exponential Smoothing the preferred forecasting model over ARIMA: it handles trend and seasonality directly without requiring pre-differencing, is more stable with limited data, and produces interpretable smoothing parameters that correspond to natural business concepts (level, trend, seasonal adjustment). ARIMA remains appropriate for the ACF/PACF diagnostic analysis as a methodological complement.
The Analytical Chain: Connecting the Five Techniques
Each of the five techniques applied in this project was selected to answer a specific commercial question. Individually each delivers a useful output. Together they form a coherent analytical chain that moves from identification to explanation to segmentation to simplification to forecasting, producing a complete picture of Stransact’s revenue landscape that no single technique could provide alone.
Show Analysis Code
tibble(Step =c("1", "2", "3", "4", "5"),Technique =c("Classification (S5)","Explainability (S6)","Clustering (S7)","PCA (S8)","Time Series (S9)" ),Question_Answered =c("Which engagements are High Value?","Why is an engagement High Value?","Which client groups exist and how do they behave?","What is the underlying structure of the engagement portfolio?","Where is revenue heading and when does it peak or dip?" ),Key_Output =c("Binary HV prediction; 95% accuracy; AUC 0.970","Feature importance; SHAP waterfall; cash collection = top driver","4 segments: Strategic, Efficient Mid-Tier, Collections Risk, Compliance","4 components explain 80.2% of variance; PC1 = Financial Scale","Flat trend since H2 2023; Feb dip; 25% monthly collection gap" ),Feeds_Into =c("Provides the target label that Sections 6, 7 and 8 explain and contextualise","Identifies which variables to prioritise in cluster profiling and PCA","Cluster labels added as features to improve classification AUC","Validates clustering separation; provides 2D partner portfolio view","Confirms the revenue plateau identified in clustering and classification" )) |>kable(col.names =c("Step", "Technique", "Question Answered","Key Output", "Feeds Into")) |>kable_styling(bootstrap_options =c("striped", "hover", "bordered"),full_width =TRUE ) |>column_spec(1, bold =TRUE, width ="1cm") |>column_spec(2, bold =TRUE, width ="3cm") |>column_spec(3, width ="4cm") |>column_spec(4, width ="5cm") |>column_spec(5, width ="5cm")
The Analytical Chain — How the Five Techniques Connect
Step
Technique
Question Answered
Key Output
Feeds Into
1
Classification (S5)
Which engagements are High Value?
Binary HV prediction; 95% accuracy; AUC 0.970
Provides the target label that Sections 6, 7 and 8 explain and contextualise
2
Explainability (S6)
Why is an engagement High Value?
Feature importance; SHAP waterfall; cash collection = top driver
Identifies which variables to prioritise in cluster profiling and PCA
Where is revenue heading and when does it peak or dip?
Flat trend since H2 2023; Feb dip; 25% monthly collection gap
Confirms the revenue plateau identified in clustering and classification
10 What the Five Analyses Say — Individually
Classification Model
The Random Forest classifier identifies High Value engagements with 95% accuracy and AUC of 0.970. It demonstrates that the firm can reliably distinguish commercially strong engagements from weak ones based on observable variables at the time of engagement. Critically, 48% of the 200 engagements in the dataset qualify as High Value — meaning the firm already has a strong base of valuable work. The challenge is not finding high-value engagements; it is doing more of them deliberately.
Model Evaluation and Explainability
SHAP analysis reveals that cash collection — not fee size, service line, or client tier — is the primary driver of high-value classification. Collected_Amt and Collection_Rate together account for approximately 26% of the model’s predictive power. Agreed_Fee ranks second. This finding has a sharp implication: two engagements with the same agreed fee will be classified differently based on how much is actually collected. Revenue quality, not revenue volume, is what separates High Value from Standard.
Clustering
K-Means segmentation with k=4 reveals four commercially distinct groups. Cluster A (26 engagements, 100% High Value) represents the firm’s strategic crown-jewel relationships — high-fee, Gold-tier, well-collected IT and Audit work. Cluster C (69 engagements, 30% High Value) is the most urgent problem: reasonable fees but a 65.6% average collection rate. Cluster C alone suppresses the firm’s overall commercial performance. Cluster D (45 engagements) represents stable but low-margin compliance work that consumes capacity without generating high-value outcomes.
Dimensionality Reduction
PCA confirms that despite 12 financial and delivery variables, the engagement portfolio is fundamentally structured along two dimensions: financial scale (PC1, 34.4% of variance) and delivery volume (PC2, 25.1%). Four components explain 80.2% of all variation. The PCA biplot shows that High Value engagements cluster to the right of PC1 — confirming that financial scale is the dominant axis of commercial performance. However, the overlap between High Value and Standard engagements in PC space confirms that scale alone is insufficient — collection quality and utilisation efficiency also contribute to the classification boundary.
Time Series Analysis
STL decomposition and Holt-Winters forecasting reveal a revenue trajectory that has plateaued since mid-2023. The series shows no sustained growth trend — monthly agreed fees fluctuate around a flat mean with a consistent dip in February and elevated activity in July and September. More critically, the collection gap analysis shows that approximately 25% of billed revenue goes uncollected every month. Over a 12-month period this represents a material cash leakage that compounds the flat revenue trend into an effective revenue decline in real terms.
10.1 The Convergent Story: What All Five Agree On**
The five analyses converge on three findings that are consistent across every technique:
Finding 1
Collections is the central commercial problem: The classification model identifies collection rate as the second-most important predictor. The explainability analysis confirms collected_amt as the top SHAP driver. Cluster C’s defining characteristic is a 65.6% collection rate. The time series shows a 25% monthly gap between billed and collected revenue. Every technique, from a different analytical angle, points to the same root cause: the firm is generating revenue it is not collecting.
Finding 2
The firm has a portfolio mix problem, not a volume problem: 48% of engagements are already High Value. The classification model, the cluster profiles and the PCA all confirm that high-value work exists in the firm and is identifiable. The issue is that 69 engagements (Cluster C) and 45 engagements (Cluster D) consume significant delivery capacity while generating low HV rates of 30% and 40% respectively. The time series confirms no revenue growth — the flat trend reflects a portfolio weighted toward standard and compliance work rather than strategic and advisory work.
Finding 3
The drivers of high value are known and actionable: The explainability analysis identifies the top predictors: collected_amt, agreed_fee, collection_rate, avg_billing_rate, and client_tier. These are not fixed characteristics — they are variables the firm can influence through pricing decisions, billing discipline, client selection, and collections management. The cluster analysis shows that Cluster A engagements (100% HV) share identifiable commercial characteristics that can be replicated: high agreed fees, Gold-tier clients, strong billing rates, and collection rates above 78%.
10.2 Recommendation
Recommendation: Stransact should implement a Revenue Quality Programme — a structured initiative that simultaneously improves collections on existing engagements (targeting Cluster C), shifts new engagement intake toward the commercial profile of Cluster A, and uses the classification model as a pre-acceptance screen for all proposals above ₦1m in agreed fee. This single recommendation is supported by all five analyses as follows:
Show Analysis Code
tibble(Technique =c("Classification","Explainability","Clustering","PCA","Time Series" ),Evidence =c("95% accuracy predicting HV; strong features identifiable pre-engagement","Cash collection drives HV more than fee size; top-5 features are all measurable","Cluster C (n=69) has 30% HV rate and 65.6% collection rate","Financial scale (PC1) separates HV from Standard in 2D space","Flat revenue trend; 25% monthly collection gap; Feb dip confirmed" ),Action_It_Supports =c("Deploy model as a proposal screen: score every new engagement before acceptance","Set minimum collection rate targets (85%+) as a condition of engagement acceptance","Launch a 30-day collections intervention on all Cluster C engagements immediately","Use PCA biplot quarterly as a portfolio health review with partners","Set monthly collection targets; run proactive BD in January to close February gap" )) |>kable(col.names =c("Technique", "Evidence", "Action It Supports")) |>kable_styling(bootstrap_options =c("striped", "hover", "bordered"),full_width =TRUE ) |>column_spec(1, bold =TRUE, width ="2.5cm") |>column_spec(2, width ="7cm") |>column_spec(3, width ="7cm")
Integrated Findings — Five Techniques
Technique
Evidence
Action It Supports
Classification
95% accuracy predicting HV; strong features identifiable pre-engagement
Deploy model as a proposal screen: score every new engagement before acceptance
Explainability
Cash collection drives HV more than fee size; top-5 features are all measurable
Set minimum collection rate targets (85%+) as a condition of engagement acceptance
Clustering
Cluster C (n=69) has 30% HV rate and 65.6% collection rate
Launch a 30-day collections intervention on all Cluster C engagements immediately
PCA
Financial scale (PC1) separates HV from Standard in 2D space
Use PCA biplot quarterly as a portfolio health review with partners
Time Series
Flat revenue trend; 25% monthly collection gap; Feb dip confirmed
Set monthly collection targets; run proactive BD in January to close February gap
Show Analysis Code
data_clustered |>mutate(HV =as.numeric(as.character(high_value_engagement)) ) |>group_by(Cluster, service_line) |>summarise(HV_Rate =mean(HV) *100,n =n(), .groups ='drop') |>ggplot(aes(x = Cluster, y = HV_Rate,fill = service_line)) +geom_col(position ='dodge', alpha =0.85) +geom_hline(yintercept =48, linetype ='dashed',colour ='grey40') +annotate('text', x =0.6, y =50,label ='Firm avg: 48%', size =3.5,colour ='grey40') +scale_fill_manual(values =c('Audit'='#1A3C6B','Tax'='#5B2D8E','Payroll'='#7A4A00','IT Consulting'='#145214')) +labs(title ='High Value Rate by Cluster and Service Line',x ='Cluster',y ='High Value Rate (%)',fill ='Service Line') +theme_minimal(base_size =12)
Figure 20: High Value Rate by Cluster and Service Line
10.3 Implementation Roadmap
The Revenue Quality Programme should be structured in three phases aligned to the analytical findings:
Phase 1 — Immediate (0–30 days): Collections Intervention on Cluster C
Identify all 69 Cluster C engagements using the cluster model output • Assign a dedicated collections review to each engagement within 30 days • Set a firm-wide collection rate floor of 85% for all active engagements • Implement automated 14-day and 30-day invoice reminders for all outstanding balances Expected impact: Expected impact: closing the collection gap from 25% to 15% on Cluster C alone would recover approximately ₦6–8m in monthly cash — without winning a single new engagement.
Phase 2 — Short-term (1–3 months): Proposal Screening with the Classification Model
Integrate the Random Forest model into the engagement acceptance process • Run every proposal above ₦1m through the model before partner sign-off • Use the SHAP waterfall output to brief partners on the top commercial risk factors for each proposal • Set a minimum predicted HV probability threshold of 0.60 for new engagements Expected impact: Expected impact: gradually shifting the portfolio mix toward Cluster A characteristics — higher fees, stronger collection rates, Gold-tier clients — compounding the revenue quality improvement from Phase 1.
Use the PCA biplot as a quarterly portfolio review tool at partner level • Set explicit targets to grow Cluster A from 26 to 35+ engagements over 12 months • Review Cluster D (high-volume compliance) for repricing or capacity reallocation • Refresh the time series model monthly; track whether the flat revenue trend turns upward • Run a 6-month forecast at the start of each quarter to guide staffing and BD investment Expected impact: Expected impact: a portfolio that generates higher revenue per engagement, stronger cash conversion, and a measurable upward trend in monthly agreed fees — evidenced by the time series model’s forecast shifting upward as the mix changes.
Conclusion
This analysis began with a single question: how can engagement analytics predict high-value client work, uncover commercially significant patterns, and support strategic revenue planning at Stransact? The answer, delivered across five techniques and 200 engagement records, is precise.
The firm does not have a revenue generation problem, it has a revenue quality and retention problem. It wins engagements. It delivers them but it does not consistently collect what it bills, and it does not systematically prioritise the type of work that generates the strongest commercial outcomes. The classification model knows what high-value work looks like. The explainability analysis knows what drives it. The cluster model knows where the problems are concentrated. PCA knows how to show it visually. And the time series knows when the firm is most vulnerable.
Together they point to one action: implement a Revenue Quality Programme that uses this analytical infrastructure — not as a one-time project, but as a standing management tool. The model should be re-trained quarterly. The clusters should be reviewed monthly. The time series should be updated and forecast at the start of every quarter. The analytics do not replace partner judgment, they make it faster, more consistent, and more defensible.
Final verdict: Stransact’s path to revenue growth does not run through winning more engagements. It runs through collecting what it has already won, selecting future engagements more deliberately, and managing the portfolio as a strategic asset rather than an accumulation of individual client relationships. The data makes this clear. The recommendation is to act on it.
11 Limitations and Further Work Limitations of the Study
Despite yielding commercially valuable insights into the drivers of high-value engagements at Stransact, several limitations should be noted with regard to the research process and findings.
First, the study relied on a relatively small operational sample, which included 200 engagement-level observations accumulated over a two-year period between May 2023 and May 2025. Although sufficient for exploratory data analysis, classification modelling, clustering and forecasting, this sample size is likely insufficient for model stability and predictive robustness over longer periods. Professional services revenue is often affected by various factors, including economic cycles, regulatory deadlines and advisory needs, which may have been better captured using a larger dataset spanning multiple business cycles.
Second, the dataset consisted of operational records of a single professional services firm. As a result, the findings pertain specifically to the operational structure, pricing, services and client portfolio of Stransact, which limits their potential applicability to other companies in the market. While many of the insights may be applicable in comparable firms, the results cannot automatically be extended to all consultancies, accounting firms and advisory companies without further investigation.
Third, several variables known to affect engagement value were missing from the operational records provided to the author. These include:
indicators of client satisfaction, proposal conversion rates, relationship strength with partners, macroeconomic conditions, demand shocks in specific sectors, and engagement complexity factors.
In this case, the models focus on commercially observable operational patterns rather than the broader strategic context that drives client value creation.
Fourth, although the Random Forest classification model yielded impressive results, its explainability through SHAP analysis and variable importance remains probabilistic in nature. In other words, the models help identify variables related to commercially successful engagements, but they do not establish causation. For instance, the model indicates a very strong correlation between high collection rates and high-value engagements, but it does not prove that collections alone are responsible for the strategic value of engagements.
Fifth, due to the relatively short span of available monthly revenue records, the Holt-Winters and ARIMA models are likely sufficient for short-term operational forecasting. However, their forecast confidence intervals are relatively wide, which can be attributed to the relatively small number of observations used. A longer revenue history would yield more accurate trend estimates, seasonality patterns and forecasts.
Lastly, the study has been performed under the practical constraints of an MBA analytics project. Consequently, the analysis focuses on efficient and interpretable machine learning models rather than computationally intensive deep learning and ensemble methods.
11.1 Further Work
Several avenues of research could be pursued in future efforts.
To begin with, it would be possible to expand the dataset longitudinally and organizationally. Extending the observation period to five or more years would enable better analysis of:
revenue trends over time, recurring compliance cycles, client retention dynamics, and sensitivity to macroeconomic changes.
Similarly, the addition of operational records from other professional services firms would facilitate comparative analyses and increase the external validity of the models developed.
Future studies could also introduce more behavioural and relational variables, which may include:
success rates of proposals, satisfaction levels of clients, engagement turnaround times, level of partner involvement, delayed payment patterns, and referral generation.
These variables would help understand how commercial relationships develop within professional services organizations.
In terms of modeling techniques, more advanced machine learning architectures could be employed if more computing power and data becomes available. Some of the possible directions for future research include:
gradient boosting machines (XGBoost and LightGBM), ensemble learning frameworks, bayesian forecasting models, neural network-based time series models, and survival models for client retention.
These techniques may lead to increased predictive performance in larger datasets.
Furthermore, future projects could aim to implement real-time operational dashboards that are integrated directly into business development and engagement management processes. In contrast to this project, which focuses on retrospective reporting, the next steps would involve implementing tools to score ongoing engagements and prioritize clients based on revenue intelligence.
Another useful direction for further research would be integrating financial forecasting with workforce planning and capacity optimization models. As the study revealed, utilization, billing efficiency and collections are the key commercial drivers. Therefore, connecting revenue intelligence with workforce allocation could optimize consulting and compliance teams’ deployment.
Lastly, it would be useful to assess the organizational impact of introducing revenue intelligence systems. For example, it could be evaluated whether predictive engagement scoring and client segmentation contribute to:
revenue growth, profitability, collections, client retention, and expansion of service lines.
References
Adubi, O. (2026). Anonymised Stransact Revenue Intelligence Engagement Dataset [Dataset]. Collected from Stransact, Lagos, Nigeria. Data available on request from the author.
Boehmke, B., & Greenwell, B. M. (2020). Hands-on machine learning with R. CRC Press.
Hyndman, R. J., & Athanasopoulos, G. (2021). Forecasting: Principles and practice (3rd ed.). OTexts. https://otexts.com/fpp3/
James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An introduction to statistical learning: With applications in R (2nd ed.). Springer.
Kuhn, M., & Johnson, K. (2019). Feature engineering and selection: A practical approach for predictive models. CRC Press.
Kuhn, M., & Wickham, H. (2020). Tidymodels: A collection of packages for modeling and machine learning using tidyverse principles in R. https://www.tidymodels.org/
Müller, K., & Wickham, H. (2023). tibble: Simple data frames (R package version 3.2.1). https://CRAN.R-project.org/package=tibble
Pedersen, T. L. (2024). patchwork: The composer of plots (R package version 1.2.0). https://CRAN.R-project.org/package=patchwork
Robinson, D., & Hayes, A. (2024). broom: Convert statistical analysis objects into tidy tibbles (R package version 1.0.6). https://CRAN.R-project.org/package=broom
Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer.
Wickham, H., Averick, M., Bryan, J., Chang, W., McGowan, L., François, R., Grolemund, G., Hayes, A., Henry, L., Hester, J., Kuhn, M., Pedersen, T. L., Miller, E., Bache, S. M., Müller, K., Ooms, J., Robinson, D., Seidel, D. P., Spinu, V., Takahashi, K., Vaughan, D., Wilke, C., Woo, K., & Yutani, H. (2019). Welcome to the tidyverse. Journal of Open Source Software, 4(43), 1686. https://doi.org/10.21105/joss.01686
Wright, M. N., & Ziegler, A. (2017). ranger: A fast implementation of random forests for high dimensional data in C++ and R. Journal of Statistical Software, 77(1), 1–17. https://doi.org/10.18637/jss.v077.i01
Yu, G. (2024). ggplotify: Convert plot to ggplot object (R package version 0.1.2). https://CRAN.R-project.org/package=ggplotify
Zwillinger, D., & Kokoska, S. (2000). CRC standard probability and statistics tables and formulae. CRC Press.