Data Science Services in India
The analytical work itself: turning a business question into a modelling problem, proving there is signal before anyone builds a platform, and choosing metrics that match the decision being made. We are a data science team in India working with founders, CTOs and product leaders in the US, UK, Canada, Australia and New Zealand.
Why Do Most Data Science Projects Never Change a Decision?
Ask a CTO what happened to their last data science project and you rarely hear that the model was bad. You hear that it sat in a notebook, that the results were interesting but nobody could act on them, or that operations quietly kept using the spreadsheet. The modelling was the easy part. The failure was upstream of it.
Here is the shape it usually takes. Someone asks for a churn model. A data scientist finds a churn flag in the warehouse, trains a gradient boosted tree on it, reports an AUC of 0.89 and everyone is pleased. Two months later nothing has changed, and the reason is that the flag was set by the billing system on the day the subscription ended. By then the customer had already decided, weeks earlier, and no retention offer was going to help. The model was accurate and useless at the same time, because the target was defined by an accounting event rather than by the moment a human could still intervene.
The second pattern is subtler. The model is genuinely good, the target is sensible, and it still fails, because nobody asked what the business would do with a score. Predicting which invoices will go unpaid is only valuable if someone chases them, and your collections team can make forty calls a day. That constraint should have driven the whole design: you needed a ranking that puts the right forty accounts at the top, weighted by recoverable value, not a probability estimate that is well calibrated across a hundred thousand rows nobody will ever look at.
Nobody asked what happens next, so nothing did.
Then there is the offline number that does not survive contact with reality. Cross validated accuracy of 94 percent, live performance closer to a coin toss. Almost always this is leakage or a train and serve mismatch, and it is discoverable in a day if you know where to look. The features included something that only exists after the outcome, or the split was random when the problem is temporal, or the feature was computed one way in pandas and another way in the service that calls the model.
Our data science services in India are built around those three failures, because in our experience they account for most of the wasted spend in this discipline. The technical work of fitting a model is largely commoditised now. What is not commoditised is the judgement about what to model, what to measure, and when to tell you that the honest answer is a rule and a dashboard rather than a model.
One more thing worth saying early. Deployment, monitoring and retraining are a separate discipline with separate machinery, and we cover them under MLOps. The pipelines that move and reshape the data before any of this starts are covered under data integration. This page is about the analysis in the middle: the part where a question becomes a model, and where most of the value and most of the mistakes live.
What Does a Data Science Engagement Actually Cover?
Not every engagement includes all of this, and the sequence matters more than the list. Feature engineering before target definition is wasted work. What follows is the full surface area, roughly in the order we build it.
Problem framing and the decision map
The first deliverable is a one page document that nobody enjoys writing and everybody refers back to. It names the decision being improved, who makes it, how often, what they do today, what a better decision is worth in money or time, and what the cost of a wrong call is in each direction. It also names the constraint: how many accounts can be contacted, how many parts can be inspected, how much inventory can be moved. That constraint decides whether you need a probability, a ranking or a threshold, and those are three different builds.
Data audit and feasibility read
Before modelling we go through what you actually have: row counts by period, null rates and when they changed, cardinality drift in categorical fields, duplicate keys, timezone handling, and the exact meaning of every timestamp. Half the surprises in a data science project are here. A field that was optional until last March, a status code that got reused for a new meaning, an ETL job that silently backfills. This phase ends with a written read on whether the question is answerable with the data in hand.
Target definition and label engineering
What exactly are you predicting, measured how, at what point in time, over what horizon. Churn is not one target. Churn within 30 days of the renewal date, defined as failing to renew, is a target. So is a support ticket predicting a downgrade. They lead to different models and different interventions. Where labels do not exist, this phase builds them, through annotation, weak supervision, or an operational proxy that gets validated against a hand labelled sample.
Baselines
Three of them, always, before any model is trained. The current process, measured on the same data as everything else. A trivial statistical rule such as the majority class, the seasonal naive forecast or the last known value. And a simple, interpretable model, usually a regularised regression or a shallow tree. Every subsequent result is reported as a gain over these, not as an absolute number, because an absolute number tells you nothing about whether the work was worth doing.
Feature engineering with point in time discipline
The features that matter are usually derived rather than raw: recency and frequency aggregates, ratios against a peer group, deltas against the customer's own history, time since last event, rolling windows at several horizons. Every one of them is built so it could only have used information available at prediction time. That constraint is what separates a feature set that transfers to production from one that quietly cheats.
Model development and selection
Gradient boosting on tabular data, because it is still the strongest default and it is honest about what it needs. Regularised linear and generalised additive models where the coefficients have to be explainable to a regulator or a credit committee. Sequence models where order genuinely carries information. Deep learning where the input is text, image or audio. Selection is by cross validated performance under the right splitting scheme, then by operational cost, then by explainability, in that order unless the domain reverses it.
Evaluation design
Chosen before the first model runs, not after the results arrive. Which metric, which slices must not regress, which threshold and why, what the confusion matrix costs at that threshold in your currency, and what result would make us recommend abandoning the project. Writing the abandon condition down in advance is the single cheapest form of intellectual honesty available in this work.
Causal and experimental analysis
Where the question is about effect rather than prediction, the toolkit changes completely. Difference in differences, synthetic control, instrumental variables, propensity weighting and uplift modelling. Where a live experiment is possible, the design work happens before launch: hypothesis, primary metric, minimum detectable effect, sample size, stopping rule, guardrail metrics.
Interpretation and handover
A model that the business does not understand does not get used. Handover includes global and local explanations, the segments where the model is weakest, a written statement of what it should not be used for, and code packaged so it can be trained again by someone else. Where the result goes into production, the boundary with the platform work is explicit and agreed rather than assumed.
Turning a Business Question Into a Modelling Problem
This is the part of the job that does not appear in tutorials, and it is where a good data scientist earns their keep. The request arrives in business language. It has to be converted into something with a target, a unit of analysis, a horizon and a decision rule attached, and the conversion is rarely unique. Different reasonable translations produce different models with different value.
Start from the action, work backwards to the prediction
The question we ask first is not what you want to predict. It is what will happen differently when the number arrives. If the answer is that a person will look at a dashboard and feel informed, we say so and suggest an analysis instead of a model. If the answer is that an email fires, a case is routed, a price changes or a technician is dispatched, then we have something to design against, including the latency budget and the volume the downstream process can absorb.
Working backwards also settles the horizon. A maintenance team needs seven days of notice to schedule an engineer and order a part, so a model that predicts failure two hours ahead is worthless to them regardless of its accuracy. Fix the horizon to the operational lead time first, then find out whether the signal exists that far out. Sometimes it does not, and that is a finding worth three weeks of your money to establish early.
Prediction and explanation are different jobs
Plenty of requests that sound like prediction are actually questions about cause. "Which customers will churn" is prediction. "Would this discount stop them churning" is causal, and a churn classifier cannot answer it, however good it is. The classifier will happily tell you that customers who contacted support are more likely to leave, which does not mean that support contact causes churn or that suppressing support contact would help.
The distinction changes everything downstream: the data you need, the design, the validation and the claim you are allowed to make at the end. We separate the two explicitly at the framing stage, because a mixed brief produces a model that is defended as predictive and used as causal, which is how organisations end up optimising a metric into the ground.
Unit of analysis and the leakage it creates
Per customer, per session, per transaction, per customer month. Each is defensible and each changes what a row means, how many rows you have, and crucially how you must split the data. If a customer appears in many rows, a random split puts the same customer on both sides and your validation score becomes a measure of memorisation. Group aware splitting is the fix, and it usually lowers the reported score, which is an uncomfortable conversation better had in week two than in month six.
Define the target with an intervention window
A well defined target has three parts: the event, the observation point and the horizon. Not "will this customer churn" but "given everything known at the start of a month, will this customer fail to renew within the following 60 days". The observation point is what makes the feature set honest. The horizon is what makes the prediction actionable. Both belong in the target definition rather than in someone's memory of a meeting.
Write down what would make this a failure
Before any modelling starts we agree a number below which the project should stop. Perhaps the model must beat the current rule by enough recall at fixed precision to fund the team running it. Perhaps forecast error must fall enough to change the safety stock policy. Without that line, every result becomes arguable, and projects with no failure condition tend to continue for a quarter longer than they should.
Baselines First, and Sometimes the Baseline Wins
A model without a baseline is a number without a meaning. An AUC of 0.82 sounds respectable until you learn that the existing rule scores 0.80 and costs nothing to run. Baselines are cheap, they take a day or two, and they set the bar that every later decision is judged against.
The three baselines we always build
The first is the incumbent: whatever your business does today, whether that is a rule, a heuristic, an analyst's judgement or nothing at all. It has to be measured on the same rows and the same metric as the model, which is often the first time anyone has actually quantified it. The second is trivial: majority class for classification, last value or seasonal naive for forecasting, mean for regression. The third is a simple model with sensible regularisation and no exotic features.
That third baseline does more work than people expect. If a logistic regression on twelve features gets within a whisker of a tuned gradient boosting model on three hundred, you have learned that the signal is mostly linear and additive, that the extra features are noise, and that you should probably ship the simple one. If the gap is large, you have learned that interactions matter and it is worth investigating which.
When the simple answer is the right answer
We have recommended dropping the model more than once. A demand forecast where seasonal naive was within a few percent of every fancy method, because the series was dominated by a weekly pattern with almost no trend. A lead scoring problem where three business rules captured nearly everything the classifier found, and the rules could be explained to a sales director in one sentence. A fraud screen where the real gain came from fixing a data entry validation rather than from any model.
The reason to say this out loud is that a model carries permanent costs. Someone has to own it, monitor it, retrain it, explain it to auditors and debug it when a source system changes. If the gain over a rule is small, that overhead eats the gain within a year. The honest question is not whether the model is better, but whether it is better by enough to be worth operating.
Report gains, not absolutes
Every result we report is framed as a delta against the baseline, with an interval around it rather than a single number. Bootstrapped confidence intervals on the test set, or the spread across cross validation folds, whichever fits. A model that beats the baseline by two points with a five point spread has not beaten anything yet, and presenting it as a win is how teams lose credibility with their own executives.
Feature Engineering, Leakage and Train Serve Skew
Feature work is where offline scores are won and where they are faked. The same technique that produces a genuinely predictive aggregate will, applied carelessly, produce a feature that encodes the answer. Knowing the difference is mostly a matter of having been burned before, so here is what we check.
The feature families that usually earn their place
On customer level tabular problems, the reliable performers are recency, frequency and monetary aggregates over several windows, ratios that normalise a customer against their own history or against a peer cohort, deltas that capture change rather than level, counts of state transitions, and time since the last event of each type. Text fields are worth mining for structure before anyone reaches for embeddings. A free text status note often contains a keyword that is more predictive than anything else in the table.
Categorical handling deserves more thought than it usually gets. Native categorical support in LightGBM and CatBoost handles high cardinality better than one hot encoding, and CatBoost's ordered target statistics were specifically designed to avoid the target leakage that naive target encoding introduces. If you do target encode by hand, it has to be fitted inside each cross validation fold. Fitting it on the full training set before splitting is one of the most common ways a notebook produces a score it cannot reproduce.
Target leakage: the feature that is too good
Target leakage is any feature that carries information about the outcome that would not exist at prediction time. The classic examples are painfully mundane. A cancellation reason code populated when the cancellation is processed. A payment plan field that is only filled for accounts that defaulted. An account status of "closed". A record update timestamp that moves when the outcome is recorded.
Our working rule is that a single feature with implausibly high importance is a suspect until proven innocent. We trace it back to the source table and ask when the value is written, not what it means. If the answer involves the outcome process, it goes. Removing it will drop the score, and it should, because that score was never real.
Temporal leakage and point in time correctness
Random splits assume rows are exchangeable. In almost every business problem they are not, because you will use the model on tomorrow's data after training on today's. Time based splitting is the default: train on an earlier period, validate on a later one, and use rolling or expanding origin evaluation to check stability across several cut points rather than a single lucky one.
Point in time correctness is the stricter version of the same idea and it is the hardest part of feature engineering to get right. Every feature value in a training row must reflect the state of the world at that row's observation timestamp, not the current state of the warehouse. Slowly changing dimensions that overwrite in place will silently give you tomorrow's customer tier on yesterday's row. If your warehouse does not keep history, this has to be reconstructed from event logs, and it is worth budgeting real time for it.
Group leakage and duplicate rows
If the same entity appears more than once, group aware splitting is mandatory. That covers customers with multiple sessions, patients with multiple visits, devices with multiple readings, and documents that exist in near duplicate form across systems. Near duplicates are the sneaky case: two rows that are not identical but describe the same underlying thing will inflate validation the same way an exact duplicate does. A quick fuzzy match pass on candidate keys before splitting is cheap insurance.
Train serve skew
The offline score is computed on features built by an analyst in pandas. Production features are computed by a service, possibly in another language, by another team, from a description. Null handling differs. A timezone differs. A rounding rule differs. One side clips outliers and the other does not. The model then receives a distribution it never saw in training, and the live metric quietly sits below the offline one with no error anywhere in the logs.
The fix is a contract with a test behind it, not a document. Either both paths call the same transformation code, or the feature is computed once and read by both, or at minimum a job takes a sample of production rows, computes features through both paths, and fails the build when they disagree beyond a tolerance. That last option can be built in a day and it tells you immediately whether you have the problem. The operational side of keeping that contract alive belongs to the platform team, but the definition of the contract belongs to whoever built the features.
Choosing Metrics That Match the Decision
Accuracy is almost never the right metric, and the default metric in whichever library you are using is a convenience, not a recommendation. The metric should follow from what a mistake costs you in each direction, and those costs are usually asymmetric by an order of magnitude.
Precision and recall priced in your currency
Precision is how many of your flagged cases are real. Recall is how many of the real cases you caught. You trade one against the other by moving a threshold, and the right place to put that threshold depends entirely on the relative cost of the two errors. Consider a fraud screen. A false positive blocks a genuine customer, costing you the margin on that order plus some goodwill. A false negative lets a fraudulent order through, costing you the full chargeback plus fees. If the second is ten times the first, the arithmetic says operate at high recall and accept the precision hit.
Now consider a manual review queue instead. Every alert costs an analyst fifteen minutes, and you have four analysts. Recall beyond what those analysts can process is worthless, so the objective becomes precision at a fixed alert volume. Same model, same data, opposite threshold. This is why we insist on the operational constraint being written down during framing: it determines the metric, and the metric determines everything after it.
The practical output we produce is a threshold table: for each candidate cut point, the expected count of true positives, false positives, false negatives, the workload implied, and the net value using your own cost figures. Business stakeholders engage with that table in a way they never engage with an ROC curve.
ROC AUC lies under heavy imbalance
ROC AUC is threshold independent and easy to quote, which is exactly why it gets misused. Under strong class imbalance it stays flattering, because the false positive rate has a huge denominator. Push the positive rate down to one in a thousand and thousands of false positives barely move the false positive rate at all, while precision collapses. Precision recall AUC, or average precision, is the honest summary in that regime because its baseline is the positive rate itself.
For ranking problems where only the top of the list gets acted on, neither is quite right. Precision at k, recall at k, and lift over random in the top decile speak directly to the operational reality of a team that can only work through so many cases a day. Where the ordering across a whole list matters, normalised discounted cumulative gain is the standard choice.
Calibration, and when it actually matters
A well ranked model is not necessarily a well calibrated one. If a downstream process multiplies the probability by an expected loss, or compares scores across segments, or feeds the number into a pricing formula, calibration is not optional. Gradient boosted trees are often over confident at the extremes, and the usual remedies are Platt scaling or isotonic regression fitted on a held out calibration set, checked with a reliability curve and expected calibration error rather than assumed to have worked.
If nothing downstream consumes the number as a probability, calibration is a nice property that does not need to be paid for. Knowing which situation you are in is the point.
Regression and forecast metrics have their own traps
Mean absolute error and root mean squared error disagree deliberately: RMSE punishes large misses harder, so choose it when one big error hurts more than several small ones, and MAE when it does not. MAPE is popular with business audiences and dangerous in practice, because it explodes near zero and is undefined at zero, which is exactly the situation in intermittent demand. Symmetric MAPE has its own asymmetry problems. For forecasting we prefer scaled errors such as MASE, which compares against the naive forecast on the same series and stays interpretable across series of very different magnitudes.
R squared deserves a caution of its own. It measures variance explained against the mean of the sample it is computed on, so it is not comparable across datasets with different variance, and a high value on a time series with a strong trend usually just means the model learned the trend.
Slices, not just the aggregate
An aggregate metric hides the failure that will actually cause a complaint. We report performance by segment as standard: new versus tenured customers, small versus large accounts, each region, each channel, each product line, and the newest cohort of data. A model that improves the overall metric while regressing on the enterprise segment is a model that should not ship, and you only find that out if the slice is on the report before the decision is made.
Class Imbalance: What Works and What Is Cargo Cult
Fraud, defaults, equipment failure, rare disease, conversion on high value products. The interesting problems are usually imbalanced, and the standard advice about them is often wrong. Resampling has become a reflex, applied without checking whether it helps or what it breaks.
What the imbalance actually breaks
Two separate things go wrong and they need separate fixes. The optimisation problem gets harder, because the loss is dominated by the majority class and the gradient signal from rare positives is weak. And the decision problem gets harder, because the default 0.5 threshold is meaningless when the base rate is one percent. The second problem is far more common than the first, and it is fixed by moving the threshold rather than by touching the data.
Threshold moving and class weights first
Most of the time, the model was fine and the cut point was wrong.
Our order of attack is: train on the natural distribution, tune the threshold against the cost table, and only then reach for anything else. Class weighting through scale_pos_weight in XGBoost or class_weight in scikit learn is the next lever, and it changes the loss without inventing rows. Focal loss is worth trying where the majority class is not just numerous but easy, since it down weights examples the model already gets right.
SMOTE is not the default it is treated as
SMOTE interpolates between a minority point and its neighbours, which assumes the space between two positives is also positive. On tabular data with categorical features and hard constraints, that assumption often fails and you generate rows that could not exist. It also distorts the class prior, so probabilities from a SMOTE trained model are no longer calibrated to reality and must be corrected before any expected value calculation uses them.
Worse, we frequently see resampling applied before the split rather than inside the training fold, which puts synthetic copies of validation neighbours into the training set and produces a validation score that is pure fiction. If you use it, it belongs inside the pipeline so it is fitted on the training fold only. Our experience is that on tabular problems, careful thresholding plus class weights matches or beats resampling most of the time, with less machinery.
Very rare positives change the approach entirely
Below roughly one positive in a thousand, supervised classification starts to run out of examples to learn from. Anomaly detection becomes a reasonable alternative: isolation forests, one class methods, or reconstruction error from an autoencoder, all of which learn the shape of normal rather than the shape of rare. In practice a hybrid does well, where an unsupervised score becomes a feature in a supervised model, and validation has to be built on a carefully assembled set of confirmed cases rather than on whatever the system happened to flag.
Correlation, Causation and When You Need Causal Inference
A predictive model tells you what tends to happen alongside what. It says nothing about what happens if you intervene. Confusing the two is expensive, and the mistake usually survives review because the model is genuinely accurate.
The classic trap, in three versions
Customers who use the mobile app churn less, so the growth team pushes app installs, and churn does not move, because engaged customers install the app rather than the app creating engagement. Accounts that received a retention call renewed at a higher rate, so the call is judged effective, but the calls went to accounts a human thought were saveable. Discount recipients spend more, so discounting is expanded, when discounts were being given to people who were already going to buy.
Every one of these is a confounded comparison. The treated and untreated groups differed before treatment, and the model has no way to know that. This is the point at which a different toolkit is required.
The methods we use and when each fits
A randomised experiment is the strongest evidence and the first thing we ask about. Where randomisation is impossible, difference in differences works when you have before and after data for a treated and an untreated group, and it depends on a parallel trends assumption that must be checked against pre period data rather than asserted. Synthetic control fits where a single unit was treated, such as one region or one store, by constructing a weighted combination of untreated units that tracks the treated one before the change.
Instrumental variables help where something shifts treatment without directly affecting the outcome, which is rare and demands a defensible story. Regression discontinuity applies where treatment is assigned by a cutoff, such as a credit score threshold, and comparisons just either side of it approximate an experiment. Propensity score methods balance observed covariates between groups, with the honest caveat that they can do nothing about confounders you did not measure.
Uplift modelling, because average effects hide the useful part
Knowing that a campaign lifts conversion by two points on average does not tell you who to send it to. Some customers convert either way and the discount is pure margin loss. Some are pushed over the line by it. A few react badly to being contacted. Uplift or conditional average treatment effect modelling targets the second group specifically, using two model approaches, transformed outcome methods, causal forests or the meta learners in libraries such as EconML and CausalML.
Uplift is harder to validate than accuracy because you never observe both outcomes for the same person. Qini and uplift curves on a randomised holdout are the standard, and the holdout has to be preserved rather than absorbed into the campaign, which is a conversation with marketing that is easier to have early.
Say out loud what you cannot rule out
Every observational estimate rests on assumptions that cannot be fully verified. We state them explicitly, run sensitivity analysis on how strong an unmeasured confounder would need to be to overturn the finding, and use placebo tests on periods or groups where no effect should exist. If the conclusion cannot survive that, it gets reported as suggestive rather than established. Directed acyclic graphs are useful here mainly as a communication device, because they force everyone in the room to state which arrows they believe in.
How Should We Run an A/B Test Without Fooling Ourselves?
Most teams running experiments are producing more false positives than they think. The statistics behind a fixed horizon test are unforgiving about how it is used, and the way experiments get run in practice violates the assumptions almost as a matter of routine.
Peeking is the biggest single problem
A classical t test assumes the sample size was fixed before the data arrived. Watching a dashboard and stopping when the p value dips below 0.05 breaks that assumption, and the more often you look, the worse it gets. Under continuous monitoring, a test run with a nominal five percent false positive rate will eventually cross the line on a null effect given enough looks, because you are taking repeated draws at the same threshold.
There are two honest fixes. Fix the sample size and the end date in advance and do not look at significance until then, which requires organisational discipline that few teams have. Or use methods designed for continuous monitoring: group sequential designs with alpha spending, always valid p values and confidence sequences, or a Bayesian formulation with a pre agreed decision rule. Sequential methods trade a little power for the freedom to look whenever you like, and for most product teams that trade is clearly worth making.
Power and the minimum detectable effect
Run the power calculation before the test, not after it disappoints you.
We compute the effect size the test can actually detect given your traffic, baseline rate and run length. Frequently that calculation ends the conversation, because the honest answer is that detecting a one percent relative change would take four months at current volume. Better to know that in advance than to run for three weeks, see nothing, and conclude the feature does not work when the test was never capable of showing that it did. Underpowered tests also exaggerate the effects they do detect, since only large fluctuations clear the bar.
Multiple comparisons quietly multiply your error rate
Four variants against a control, or one variant judged on twelve metrics, is not one test. Without correction the chance of at least one spurious win rises fast. We nominate a single primary metric before launch, treat everything else as secondary and exploratory, and apply Benjamini Hochberg control over the secondary family. Guardrail metrics are handled separately, since there the asymmetry is deliberate and you want to be sensitive to harm.
Novelty, primacy and the two week rule
A new interface gets clicked because it is new. An unfamiliar flow depresses conversion until people learn it. Both effects decay, and both are why a result measured in the first three days often reverses. Running for at least one or two full weekly cycles covers the day of week pattern, and plotting the treatment effect over time rather than only in aggregate shows whether the lift is stable or fading. A win that shrinks steadily across the test is a novelty effect wearing off.
Interference, and why marketplaces break the standard test
Unit level randomisation assumes one user's assignment does not affect another's outcome. In a marketplace it does. If your treatment makes buyers book more, sellers have less availability for the control group, and the measured lift is partly cannibalised supply. The same applies to social features, shared inventory, shared budget and delivery capacity. Cluster randomisation at the level of a city or a market, or switchback designs that alternate treatment across time windows, are the usual answers, and they cost statistical power because the effective sample size is the number of clusters rather than the number of users.
Variance reduction is free sensitivity
CUPED uses pre experiment data on the same users as a covariate to strip out variance that has nothing to do with the treatment. Where a user's pre period metric is strongly correlated with their in test metric, which is typical for revenue and engagement, this meaningfully shortens the run needed for the same detectable effect. Stratified assignment on the same covariates helps for similar reasons. Neither changes what you are estimating, which is what makes them safe.
Write the analysis plan before launch
One page, agreed and dated: hypothesis, primary metric, guardrails, randomisation unit, exclusions, minimum detectable effect, planned duration, stopping rule, and what decision each outcome triggers. It takes half an hour and it removes the entire category of argument where the analysis gets adjusted after the result is known. It also gives you an honest record of how many tests were run, which is the denominator you need when someone asks how reliable your experiment programme is.
Forecasting: Seasonality, Holidays and Hierarchies
Demand planning, capacity, cash flow, headcount, inventory. Forecasting is where data science most often touches a decision with money attached, and it has its own failure modes that general modelling advice does not cover.
Start with seasonal naive and earn your way past it
The seasonal naive forecast, meaning last week's value for the same weekday or last year's value for the same month, is a surprisingly strong competitor. It is also the denominator in MASE, so it comes for free as a benchmark. A weekly retail series with a stable pattern and no trend is often forecast almost as well by that rule as by anything else, and knowing this before you spend six weeks on a model saves the six weeks.
Classical methods still hold up
Exponential smoothing in its ETS form handles level, trend and a single seasonality with very few parameters and is hard to beat on short, well behaved series. ARIMA and its seasonal variant suit series with autocorrelation structure that survives differencing, and the automatic order selection in statsmodels or the R heritage implementations removes most of the manual work. TBATS earns its place with multiple overlapping seasonalities, such as hourly data with a daily and a weekly cycle and a yearly pattern on top.
The general point is that classical methods need less data per series and fail more gracefully than machine learning approaches. With eighteen months of monthly history, they are usually the correct choice and a boosted tree is not.
Prophet and its trade-offs
Prophet is a decomposable model with a piecewise linear or logistic trend, Fourier terms for seasonality and a built in holiday mechanism. What it buys you is speed to a reasonable forecast, interpretable components you can show a planner, and easy handling of missing periods and outliers. It is a fair default for business series with strong seasonality and known event effects.
The trade-offs are real. It is a curve fitting approach rather than a generative time series model, so it does not use autocorrelation in residuals the way ARIMA does. Its changepoint detection can be over eager on noisy series, producing trend flips that a human would not draw. Its uncertainty intervals are frequently too narrow on the trend component. On short series or on data with strong autocorrelation, ETS often beats it. We use it, we do not default to it, and we always benchmark it against the naive and classical options on the same backtest.
Holidays, promotions and the calendar you forget
Holiday effects are usually the largest single source of forecast error in retail and consumer businesses, and they are not simple flags. Effects spread over a window before and after the day. Moving holidays such as Easter, Diwali, Ramadan and Chinese New Year shift the pattern between months and years, which wrecks a naive year on year comparison. Payday cycles matter in some markets. School terms matter in others. Promotions have to be treated as known future regressors, which means someone has to give you the promotional calendar for the forecast horizon, and that request often surfaces the fact that nobody keeps a clean history of past promotions.
Machine learning for forecasting, and when it pays
Gradient boosting on lag, rolling and calendar features is a strong global approach when you have many related series and want one model across all of them, since it can borrow strength from series with more history. LightGBM is our usual choice for this. Deep learning approaches such as DeepAR, N BEATS and the temporal fusion transformer are worth the effort when the series count is large, the histories are long, and covariates matter. Below a few hundred series, the overhead rarely pays.
Two hazards to name. Lag features must be constructed so nothing from the future leaks in, and multi step forecasts need either a recursive strategy that compounds error or a direct model per horizon that does not. And global models tend to underfit the unusual series, so the small number of items that matter most to your business can end up worse than they were under the old method.
Intermittent demand needs different tools
Spare parts, slow moving SKUs and long tail inventory produce series that are mostly zeros with occasional spikes. Standard error metrics are close to meaningless here and MAPE is undefined. Croston's method and its variants model the demand size and the interval between demands separately, which is the right decomposition. Often the useful output is not a point forecast at all but a distribution feeding a service level and reorder point calculation.
Hierarchies have to reconcile
Forecast by SKU, by store, by region and nationally, and the numbers will not add up. Finance will notice. Bottom up aggregation is noisy, top down disaggregation loses item level detail, and middle out is a compromise. Optimal reconciliation methods, MinT in particular, use the covariance of base forecast errors to produce a coherent set that is usually more accurate than any single direction. If your planning process consumes numbers at more than one level, reconciliation is not optional.
Backtest with a rolling origin and forecast a range
A single train and test split on a time series tells you how one period behaved. Rolling origin evaluation, refitting at successive cut points and scoring each horizon separately, tells you how the method behaves in general and how error grows with horizon. That growth curve is what a planner needs, because it tells them how far ahead the forecast can be trusted. And the output should be a prediction interval, not a point. A safety stock decision consumes the upper quantile. A cash flow plan consumes the lower one. Giving a planner a single number throws away the information they most need.
Interpretability, SHAP, and When a Simple Model Wins
Explanation has two audiences with different needs. A data scientist wants to debug the model. A business owner, a regulator or a customer wants to know why a particular decision was made. Those need different artefacts, and treating them as one is why explanation decks so often leave everyone unsatisfied.
What SHAP gives you and what it does not
SHAP attributes a prediction to its features by averaging each feature's marginal contribution over orderings, which gives you additive local explanations that sum to the prediction, and a global picture by aggregating them. TreeSHAP makes this fast enough to be practical on gradient boosted models, which is why it has become the default.
The caveats matter. With correlated features, attribution is split between them in ways that can mislead, and the standard interventional and conditional variants answer subtly different questions. SHAP describes the model, not the world: a large attribution means the model relies on that feature, not that the feature causes the outcome. We have watched a business read a SHAP summary as a causal ranking and plan a strategy on it, which is the most expensive misuse of the tool we know of. Add to that the sensitivity to the choice of background dataset, and the sensible posture is to treat SHAP as a debugging instrument first and a communication device second.
The rest of the toolkit
Partial dependence plots show the average shape of a relationship and are misleading under correlation, which is exactly the case accumulated local effects plots were designed to fix. Permutation importance measures how much the metric degrades when a feature is scrambled, which answers a different and often more useful question than split based importance. Counterfactual explanations, the smallest change that would flip the decision, are the format non technical stakeholders find most natural, and they are what a rejected applicant actually wants to hear.
Monotonic constraints deserve wider use than they get. Both XGBoost and LightGBM let you force a feature to move the prediction in one direction only. Where domain knowledge is firm, that more income should never reduce a creditworthiness score, constraints buy you explainability and stability at very little accuracy cost, and they make the model far easier to defend.
When the interpretable model is simply the right one
If a decision has to be explained to a regulator, contested by a customer, or signed off by a committee, start with a model whose behaviour is legible rather than one you will explain after the fact. Logistic regression with sensible binning, scorecards built on weight of evidence, generalised additive models, explainable boosting machines, and short decision lists all sit in this space. The accuracy gap against gradient boosting is often smaller than people expect on clean tabular data.
There is also a maintenance argument. A regression with twenty coefficients can be reviewed by a person, versioned in a document, and reasoned about when it misbehaves. A three hundred tree ensemble cannot. Where the model will be operated by a team without deep machine learning experience, and where the marginal accuracy is worth less than the operational simplicity, the simple model is not a compromise, it is the better engineering decision.
Fairness is a design question, not a final check
Where decisions affect people, in lending, hiring, insurance, housing or access to services, group performance differences need measuring rather than assuming away, and the relevant fairness definitions are mutually incompatible in general, so someone has to choose which one applies. Removing a protected attribute from the feature set does not remove its influence, because correlated proxies remain. Which definition and which threshold your organisation is obliged to use is a legal question, and one to put to your own counsel, particularly given how quickly rules in the UK, EU and US are moving. What we bring is the measurement, the segment analysis and the documentation to support that conversation.
Three Situations We Are Usually Called Into
These are patterns rather than case studies, described the way they typically arrive. If one of them sounds like your quarter, the diagnosis section under each is the part worth reading.
The churn model that predicted the paperwork
A subscription business has a churn model with a strong offline score and no measurable effect on retention. The first thing we check is the target. In this pattern the label comes from a subscription status field that flips on the termination date, and the top features turn out to be things like a downgrade record or a final invoice adjustment, both of which are created as part of the cancellation process. The model has learned to recognise cancellations that have effectively already happened.
The rebuild starts with the intervention. If the retention team needs three weeks to run a save play, the target becomes non renewal within a window that starts three weeks before the renewal date, and every feature is rebuilt as of that observation point. The score drops, often sharply, because the leaked signal is gone. What replaces it is a model whose top ranked accounts can still be saved, which is the only version that has any value. The second half of the work is usually a holdout design so the retention programme itself can be measured rather than assumed.
The forecast that finance stopped trusting
A distributor forecasts demand at SKU and warehouse level. Planners have quietly built their own spreadsheet adjustments on top, which is the clearest signal that a forecast has lost credibility. Investigation usually finds three things: promotions were never included as a regressor even though they drive a large share of volume, holiday effects were modelled as single day flags rather than windows around moving dates, and the SKU, warehouse and national forecasts were produced independently so they never reconciled.
The fix is unglamorous. Reconstruct a clean promotional history from whatever systems hold it, model holiday windows properly including the moving ones, replace the single split evaluation with rolling origin backtests so error by horizon is visible, and reconcile the hierarchy with an optimal method rather than by rescaling. Then give planners intervals instead of points, and a short list of the series where the model knows it is weak, so their manual effort goes where it actually helps rather than everywhere.
The experiment programme producing wins that never show up in revenue
A product team runs a healthy number of tests, ships most of them as wins, and the aggregate metric refuses to move. Three causes usually combine. Tests are stopped when the dashboard first shows significance, which turns a five percent error rate into something far higher. Several metrics are checked per test with no correction. And on a marketplace or any shared inventory product, the treated group is partly taking supply from the control group, so a genuine looking lift is partly redistribution.
Rebuilding this is process work more than modelling work. Always valid confidence sequences so the team can look whenever it wants without inflating error, a pre registered analysis plan template that takes half an hour per test, one nominated primary metric with the rest treated as exploratory, cluster or switchback randomisation where interference is plausible, and CUPED to claw back the power lost by doing all of the above properly. The visible outcome is fewer declared wins, which is uncomfortable for a quarter and correct thereafter.
How the Engagement Runs, Week by Week
Timings vary with data access, which is nearly always the long pole. What follows is the shape of a typical first engagement and the artefact that lands at the end of each stage, so you can tell whether it is on track without reading a notebook.
Week one: framing and access
Sessions with the people who make the decision today, not only with the data team. We produce the decision map, the target definition, the operational constraint, the metric proposal and the agreed failure condition. In parallel we work through access: accounts, roles, the environment we will work inside, and what data can and cannot leave it. Getting access started on day one matters more than anything else in this week, because it is the item most likely to add a fortnight.
Weeks two and three: data audit and baselines
Profiling every table we will use, documenting what each timestamp means, finding the fields that changed definition mid history, and quantifying what the current process achieves. The three baselines get built and measured. At the end of this stage you get a written feasibility read, and it is a real gate. If the data cannot support the question, this is where we say so and propose either a different question or the data work needed first.
Weeks four to six: first modelling cycle
Feature construction under point in time rules, the first candidate models, and the leakage checks that come with them. The report at the end of this cycle shows performance against all three baselines, by segment, with intervals, plus the threshold table priced in your cost figures. Frequently the most valuable output here is a list of data quality problems that were invisible until a model started depending on them.
Weeks seven to ten: hardening and the decision
Stability across time windows, sensitivity to the choices made along the way, calibration if anything downstream needs probabilities, and explanation artefacts for the segments that matter. Where the model is going into production, this is where the interface with the engineering team is defined: the feature contract, the latency budget, the payload, the fallback when a feature is missing. Where it is a one time analysis, this is where the recommendation and its caveats get written.
After that: measurement, not applause
A model in production without a measurement plan is an assumption. We define the holdout or the staged rollout that will tell you whether the intervention actually changed the outcome, the metrics to watch, and the review point. Running that measurement properly usually costs less than a week and is the only way anyone finds out whether the previous nine were worth it.
How We Run Data Science Delivery From India
The offshore part of this is a real question and it deserves a real answer rather than a claim about follow the sun coverage. Here is how the working week actually looks, including the parts that are inconvenient.
The overlap window, stated honestly
A standard Indian working day of roughly 09:30 to 18:30 IST gives you very different overlap depending on where you sit. With the UK you get around four hours in winter and five in summer, which is comfortable. With Australian eastern time you get roughly two to three hours in your afternoon, and with New Zealand closer to one or two. With US Eastern you get almost nothing, because the Indian day ends at roughly the hour your morning starts.
With US Pacific, on a standard schedule, there is none at all.
So for North American clients we shift the day rather than pretend. A team working a later Indian schedule can put several hours of live overlap into your morning, at the cost of an engineer's evening, which is a real cost and shows up in retention if it is imposed rather than staffed for. The workable version is a partial shift: one or two people on the later schedule for live collaboration while the rest work normal hours, with a written handover holding it together. Which shape applies to your engagement is something we agree with you before work starts rather than something we assert here.
Written first, because the meeting is not available
With a narrow overlap, anything that depends on synchronous conversation becomes a bottleneck. So decisions are written down. Every analysis lands as a short document with the question, the method, the result, the caveat and the recommendation, posted where you can read it when your day starts. Every model has a decision log recording what was tried and why it was rejected. Standups are written, not called. The reason this works better than it sounds is that data science conclusions need to survive being read six months later by someone who was not there, and a call leaves no trace.
Review that is specific to analytical work
Ordinary code review catches bugs and misses the mistakes that matter here. Our review checklist asks different questions. Is the split appropriate to the temporal and group structure. Could any feature have used information from after the observation point. Was any preprocessing fitted before the split. Does the metric match the decision. Are the reported intervals real. Has the model been checked on the slices that matter, not only in aggregate. Two people sign off any result that will inform a decision, and the second person is expected to try to break it.
Notebooks are treated as exploration, not as deliverables. Anything that produces a result someone will act on gets moved into a repository with pinned dependencies, a seeded and reproducible entry point, and tests on the feature transformations. If a second person cannot rerun it and land within a stated tolerance, it is not finished.
Access, residency and what actually crosses a border
The default arrangement we push for is that your data does not move. Analysts get named identities in your cloud account with scoped roles, work inside a hosted notebook environment or a browser accessible workspace in your chosen region, and do not pull raw records onto a laptop. Where the data is sensitive, most of the modelling can be done on masked, hashed or synthetically generated columns, with the final validation run against real data inside your environment. What crosses the border is access under audit rather than data. The specific terms covering confidentiality, IP assignment and data processing are set in the agreements before work starts, and they are yours to define with your counsel rather than ours to summarise on a web page.
The talent pool for this specific skill
India has depth in the mathematical and statistical end of this work, and the supply of people who can fit a model is very large. The scarcer profile, here as everywhere, is the person who will argue with the brief: who asks what the score will be used for, notices that the target is defined by an accounting event, and is willing to tell a client that the baseline already wins. That is what our screening is built around. Candidates work through a problem with a deliberately leaky feature and a target that does not match the stated decision, and what we are watching for is whether they spot it and how they say so.
Risks, Blockers and the Honest Answers
Every engagement of this kind carries risks that are worth naming up front, because most of them are visible in the first fortnight if anyone is looking.
The data may not support the question
This is the most common outcome nobody plans for. The history is too short, the labels were never really recorded, the outcome is dominated by factors your systems do not observe, or the signal is genuinely weak. We build the feasibility read as a gate specifically so this surfaces in week three rather than month four, and we would rather deliver that finding and stop than continue on a budget that has already been approved.
Access delays, which are the default
The single most reliable predictor of a slow start is how long it takes to get a working environment with real data in it. Security review, VPN provisioning, a data protection assessment and someone's holiday can turn a week into a month. The mitigation is to start the request on day one, agree a synthetic or masked sample so framing work can proceed in parallel, and treat access as a tracked dependency with a named owner on your side.
Nobody owns the decision
If the person who would act on the model is not in the room during framing, the project has a structural problem that no amount of accuracy will fix. Operations will not adopt a score they did not help design, and rightly so. We insist on that person being involved in week one, and if they cannot be found, that is worth pausing over.
The model works and the process does not change
Adoption failures look like technical failures from a distance. A score that arrives in a system nobody uses, a ranking that conflicts with how a team is compensated, an alert with no defined next action. Part of the framing document exists to force these into view early: who sees the output, in which tool, at what point in their day, and what they are supposed to do about it.
Key person risk on our side and yours
Analytical work concentrates context in one head faster than most engineering does. We keep a second person across every workstream from the start, and the decision log plus written analyses exist partly so that context is recoverable. Handover, notice and continuity terms are agreed in the contract before work starts rather than described here. Your side has the same exposure: if one person in your team is the only one who knows what a field means, that is a risk worth documenting while they are still there.
Regulatory exposure sits with your counsel
Where models touch credit, employment, insurance, health or the processing of personal data, the applicable rules differ by jurisdiction and are changing quickly, particularly in the UK, EU and US. We can measure group performance differences, document data lineage and feature provenance, produce the explanation artefacts an audit tends to ask for, and flag where a design choice looks likely to attract scrutiny. What we do not do is give legal advice or make compliance claims on your behalf. Those go to your counsel with our documentation attached.
Ways to Work With Us
Three shapes, chosen by what you actually need rather than by what is easiest to staff. Scope and terms are agreed with you before anything starts.
Dedicated data science team
Named people working as part of your team, in your tools, with your rituals, on a roadmap you own. Right when there is a stream of analytical questions rather than one project, and when the domain knowledge built up over months is worth keeping in the same heads. Composition is usually a mix of senior and mid level, with the seniority weighted towards the framing and evaluation work rather than the fitting.
Scoped project
A defined question with written acceptance criteria: build and validate a demand forecast for one product family, rebuild a churn model with a corrected target, or design and analyse an experiment programme. Right when the gap is specific and your team will own the result afterwards. Scoped after the feasibility read, because scoping before seeing the data is guesswork dressed up as a plan.
Advisory and review retainer
A standing arrangement where we review your team's analytical work: experiment designs before launch, evaluation methodology, leakage audits on models about to ship, and a second opinion on results that will drive a large decision. Right when you have capable people and want an outside check on method rather than extra hands.
Where This Sits Alongside Our Other Work
Analysis depends on what feeds it and on what happens to the result. Where the pipelines that assemble your data are the actual bottleneck, that is data integration work and it usually has to come first. Where the modelling is fine and the problem is getting models deployed, monitored and retrained without silent decay, that is MLOps.
For staffing rather than a scoped engagement, you can hire data scientists who work inside your team, or hire Python developers in India for the tooling and pipeline work that surrounds the analysis. Where the question involves language models rather than tabular prediction, such as retrieval over your own documents, our RAG development team covers that ground instead.
Frequently Asked Questions About Data Science Services in India
How do you decide whether a problem needs machine learning at all?
We start from the decision, not the data. If a rule your operations team already trusts gets within a point or two of a trained model, the rule wins, because it is cheaper to run and easier to argue with. Machine learning earns its place when the pattern is genuinely multivariate, when it shifts often enough that a hand written rule goes stale, and when the volume of decisions is high enough that small accuracy gains add up to money.
We have no labelled data. Can you still help?
Often yes, but the first phase becomes label creation rather than modelling. That can mean mining an existing operational system for implicit labels, running a structured annotation exercise with your domain experts, using weak supervision to combine noisy heuristics, or shipping a rule based version first purely so that its outcomes generate the training data. We would rather tell you that in week one than model a target that was never really measured.
What accuracy can you promise before you see our data?
None, and anyone who quotes you a number before looking is guessing. Achievable accuracy depends on how much signal your data actually carries about the outcome, which is a property of your business, not of our skill. What we do commit to is a fast read: two to three weeks of data audit and baseline work usually tells us whether there is a workable signal, and we say so plainly if there is not.
How do you stop leakage from inflating our offline numbers?
Time based splits instead of random ones, point in time feature construction so every value was knowable at prediction time, group aware splits so the same customer never sits on both sides, and a suspicion rule: any feature that pushes a metric up sharply gets investigated before it gets celebrated. We also rebuild the top features from raw source tables to confirm nothing downstream of the outcome crept in.
Our A/B tests keep showing wins that vanish later. Why?
Usually one of four causes. Someone stopped the test at the moment it looked significant, which inflates false positives badly. The sample size was set for an effect larger than anything realistic. Several variants or metrics were tested with no correction. Or the effect was real for a fortnight and then decayed, which is novelty rather than value. Sequential methods and a pre registered analysis plan fix most of this.
Can a data science team in India work without our customer data leaving our region?
Yes, and it is the arrangement we prefer. Analysts get named identities in your cloud account with scoped roles, work inside a hosted notebook or a browser based workspace in your region, and never pull raw records to a laptop. Where the data is sensitive, modelling can run on masked, hashed or synthetic columns for everything except the final validation. Access is logged and reviewable by you.
How long before we see something we can act on?
A useful baseline and an honest read on data quality typically land inside three weeks. A first model good enough to test against the current process is usually six to ten weeks, depending on how much of that time goes into label definition and access. Anything faster is either a very clean dataset or a model nobody has stress tested for leakage yet.
Do you hand over notebooks or production code?
Notebooks are for exploration and they stay in the repository as evidence of what was tried. What we hand over is packaged code with pinned dependencies, a reproducible training entry point, tests on the feature transformations, an evaluation report tied to a specific data snapshot, and a decision note that explains the target definition, the metric choice and the known weaknesses of the model.