Analytics Strategy

NFL Pass Attempts Projection Model: A Complete Guide to Modeling Volume

NFL Pass Attempts Projection Model: A Complete Guide to Modeling Volume

When you want to build a solid modeling framework for the National Football League, you always have to start with neutral pass rate, pace per snap, and the betting spread or total, because weather and injuries swing offensive volume way more than most casual fans and bettors tend to think. You should use rolling three to six game trends and opponent adjusted numbers, starting with simple averages before tightening things up with Poisson or tree models when they truly add real predictive signal to your pipeline. Validating your work the right way means running walk forward tests by week and season, tracking metrics like mean absolute error and interval hit rates, and always sanity checking wind speeds, blowout potentials, and backup quarterback games. Game day updates matter immensely, so you have to react quickly to late inactives, travel schedules, and sharp line moves, making sure you publish a full distribution range such as fifty, eighty, or ninety five percent intervals instead of relying on just one static number. Our core expertise lives at ATSwins, which is an advanced artificial intelligence powered sports prediction platform offering data driven picks, player props, betting splits, and profit tracking across the National Football League, National Basketball Association, Major League Baseball, National Hockey League, and college athletics, where both free and paid plans give everyday bettors the exact insights and guides they need to make much smarter and more informed wagering decisions every single week of the year.

Problem framing and data sources, building a weekly pass attempts model that bettors can trust

The main goal here is pretty straightforward and crystal clear. We want to produce weekly projections of National Football League pass attempts at both the team and quarterback levels, complete with uncertainty bands that are robust enough to guide serious betting decisions. For anyone hanging out on ATSwins, that essentially means quantifying offensive volume before the rest of the betting market catches up, and updating those projections on the fly whenever fresh injury notes or shifting weather forecasts hit the wire.

We honestly did not find a single prebuilt pass attempts model sitting out there in the open source wild that we could just copy and paste verbatim, so we built our own using the core drivers that consistently explain passing volume across the league. These drivers include pace measured in seconds per snap, neutral script pass rate, pass rate over expectation, coordinator and head coach tendencies, weather factors like wind and precipitation and domes, injuries and role changes across quarterback, offensive line, and skill position rooms, market context through spreads and totals, and opponent pressure or coverage tendencies.

Our core data pillars rely on play by play and game level feeds from open source football repositories, roster management feeds and transaction trackers to properly tag quarterbacks and pass catchers with availability flags, offensive line pressure rates allowed and time to throw metrics from tracking data feeds, and historical box score splits which are super helpful for routine sanity checks. What we are actually projecting includes team level pass attempts per game, quarterback level pass attempts per game to account for starter ownership and potential backup workloads, and distribution aware outputs giving us both a mean projection and a predictive interval for prop betting and market timing.

How these outputs get used over at ATSwins involves powering player props like quarterback attempt markets and completion volume, providing deep context for team totals where attempts act as a leading indicator for passing yardage and touchdowns, running in week news sensitivity analyses for late injuries, forecasted high winds, and offensive line shuffles, and backing up betting splits with historical comparisons inside the product ecosystem alongside profit tracking for every single prop edge we uncover.

Target definition and feature engineering, turn pbp data into stable signals

When you start defining your target variable, you have to be super precise. Our target is regulation pass attempts by the offense or the starting quarterback, which means we deliberately exclude spikes and kneel downs. Overtime is also stripped entirely from the target to reduce variance that is simply not forecastable at lineup lock. You can also optionalize a split between first half and second half attempts if you want to handle script sensitivity better, since some models genuinely benefit from predicting halves separately and then summing them up, especially when coaching staffs script plays differently early versus late in games. Attaching proper metadata like the opponent, home or away designation, week number, rest days, travel distance, implied team totals, spreads, and weather conditions is non negotiable for downstream modeling success.

Considering partial pooling in the target computation helps smooth out raw noise. We use exponentially weighted means by team season, quarterback season, and offensive coordinator season to smooth out the raw target variable. Hierarchical centering lets us blend team and quarterback histories when the sample size for a specific player is way too small. For example, if a backup quarterback suddenly draws a surprise start, we can borrow heavily from the broader team pass tendency combined with an offensive coordinator level prior.

Building out the key features requires a step by step approach. For pace and script, we look at seconds per snap using rolling three and six game windows from play by play data, computing both neutral and full situation pace. We also track trailing rate through in-game win probability, specifically looking at the share of plays where win probability drops below forty percent, though you can tune this threshold. Faster pace and more trailing game script time usually push pass attempts significantly higher.

Pass rate context is another massive piece of the puzzle. Neutral script pass rate measures the share of passes thrown when win probability sits between forty and sixty percent during the first through third quarters while avoiding the two minute drill, which helps isolate pure team DNA. Pass rate over expectation is modeled off down, distance, field position, time remaining, and score differential, leaving a residual that represents team aggressiveness. We keep rolling three and six game windows of this metric and adjust them for opponent strength.

Market implied volume comes straight from odds feeds by pulling point spreads and game totals to create implied pass rate proxies such as underdog buckets and total score buckets. Interaction features like underdogs in high total games or favorites in low total games help capture how betting markets telegraph game environments that directly alter play calling tendencies.

Personnel and roles matter a ton. We track quarterback status, differentiating starters from backups, and evaluate the last four weeks of pass share in wins and losses for that specific signal caller. Wide receiver, tight end, and running back availability is tracked with binary flags and counts for missing top options. Route participation proxies are derived from snap shares and target shares if reliable data feeds are missing, ensuring we understand how much trust an offensive coordinator has in their passing attack.

Offensive line and pressure metrics from tracking systems give us pressure rate allowed, quick pressure share, time to throw, and quarterback scramble rates. High pressure can suppress longer developing pass concepts and nudge play callers toward quicker throws, though the net effect on total attempts depends heavily on scheme and opponent. Opponent pressure rates and blitz rates capture matchup heat.

Weather and venue variables account for domes versus outdoor stadiums, while wind buckets are categorized carefully because wind effects are highly non-linear. You should never assume a linear penalty for wind, and you must include precipitation flags since strong winds tend to cap total pass attempts or compress average depth of target.

Coverage shells and opponent identity features use opponent tendencies and defensive expected points added allowed against the pass to calibrate at the team level, leveraging both season to date and rolling windows. Leakage prevention is critical, meaning you must only include information that was actually available up to that specific week during training and evaluation phases. Encodings and calendars feature weekly categorical or cyclical sine and cosine transformations, rest day flags, short week notices for Thursday night games, long rest periods following byes, and travel distance with time zone changes. Outcome scaling and count family preparations require including an offset for game pace, such as log expected plays in count models, while quarterback attempt ownership models control for backup scenarios.

Modeling and training, baselines, count models, trees, and hierarchical Bayes

Starting out with strong baselines is the best way to catch data bugs and define your minimum viable edge before scaling up to complex machine learning pipelines. A rolling mean baseline takes the last five games of regulation attempts for a team, opponent adjusted and weighted more heavily toward recent games, combined with a simple market correction using spread and total buckets. A ridge regression baseline predicts attempts using a small feature set including neutral pass rate, pass rate over expectation, seconds per snap, underdog flags, wind buckets, and coordinator tenure, which reduces variance and gives you a sensible floor.

Count models like Poisson regression with a log link handle our core drivers with an offset for log expected plays, offering great interpretability and natural calibration for counts, though they can sometimes understate variance when overdispersion is present. Negative binomial regression shares the same structure but handles overdispersion much better, providing realistic uncertainty and superior predictive interval coverage. For both count models, including team, quarterback, and coordinator identifiers as group effects or leave one out means prevents data leakage.

Tree ensembles like gradient boosted trees capture non linear effects and complex interactions, such as pressure intersecting with offensive line injuries and opponent blitz rates, though they require careful calibration to produce reliable predictive intervals. Monotone constraints on key market features help maintain stability.

Hierarchical Bayesian models offer partial pooling across teams, quarterbacks, and seasons using negative binomial or Poisson structures with team season, coordinator season, and quarterback season random effects. This gives us natural shrinkage for small samples like rookies or backups, full posterior predictive intervals for props, and robust risk management capabilities.

Schedule and travel encodings, walk forward cross validation using rolling origin evaluation, and optimization objectives targeting mean absolute percentage error and continuous ranked probability scores round out the training loop. Ensembling a weighted blend of negative binomial generalized linear models, gradient boosted trees, and hierarchical Bayesian means via out of sample optimization gives us a bulletproof production stack.

Validation, calibration and updating, trust but verify, every week

Designing a robust backtest requires covering multiple seasons with a rolling origin scheme where you train on all past weeks and validate on the next week sequentially. Injury handling in backtests must rely exclusively on information known prior to kickoff, and weather data must be limited to forecast snapshots rather than post game actuals.

Metrics to track include mean absolute error, mean absolute percentage error, coverage of fifty, eighty, and ninety five percent predictive intervals, and continuous ranked probability scores for distribution quality. Subgroup metrics should examine high wind games, big underdogs, backup quarterback starts, high versus low totals, and road teams traveling across multiple time zones.

Calibration tools like reliability plots, probability integral transform histograms, and residual checks against spreads, wind buckets, and pass rate over expectation ensure our models are neither overconfident nor biased. Stress tests simulating extreme blowouts, backup quarterback insertions, and hurricane force wind buckets ensure the pipeline never breaks down under weird game scripts.

Game day updates require swapping injuries dynamically, reacting to late offensive line inactives, adjusting quarterback attempt ownership, and updating market spreads and weather forecasts up to the final minutes before kickoff. Deployment checks verify data freshness timestamps, diff logs for sudden projection spikes, and strict sanity thresholds.

Workflow, tooling and reproducibility, make it boring and durable

Building a durable tech stack relies on core libraries for data manipulation, gradient boosting, and probabilistic programming, alongside notebooks for exploration and clean scripts for production scoring runs. Versioning data using date stamped raw folders, hashing important tables, saving model binaries, scalers, and encoders, and enforcing strict seed control in configuration files ensures complete reproducibility.

Data auditing involves unique keys, integrity checks for game team week rows, exclusion of overtime from targets, and pre kickoff resolution of injury statuses. Comprehensive documentation covering baseline assumptions, data dictionaries, change logs, and reference comparisons against historical box scores keeps the entire operation transparent and scalable.

Implementation steps, from blank repo to weekly projections

The step by step implementation journey begins with data ingestion, where you pull weekly play by play and game data, store raw parquet snapshots, ingest rosters and transactions, resolve depth charts, and load sportsbook spreads and totals with precise timestamps to create canonical pre kickoff snapshots. Target construction aggregates team and quarterback pass attempts while removing spikes, kneels, and overtime.

Feature pipelines compute pace, neutral pass rate, pass rate over expectation, rolling windows, market features, availability flags, route participation proxies, and weather conditions. Baseline and generalized linear models fit ridge and negative binomial regressions evaluated through walk forward cross validation. Tree models incorporate tuned learning rates and max depths with isotonic calibration.

Hierarchical Bayesian models sample via Markov chain Monte Carlo methods to export posterior means and intervals. Ensembling blends models by out of sample scores, while backtesting from historical seasons outputs weekly top movers and coverage diagnostics. Game week operations follow a strict cadence from Monday baseline releases through Wednesday injury updates, Friday weather locks, and Sunday morning active player adjustments, followed by post week audits that log major misses and root causes.

Practical notes on features, what moves pass attempts the most

Understanding what actually moves pass attempts is essential for anyone building a serious projection model. Pass rate over expectation and neutral pass rate form the absolute backbone of passing volume, because coaching staffs rarely change their fundamental offensive DNA from week to week unless they are forced to by major injuries or severe weather events.

The spread effect is inherently asymmetric, meaning big underdogs tend to throw the football significantly more often to chase games, while massive favorites sometimes slow their overall pace down late in blowout scripts.

Wind is notoriously lumpy and non linear in its impact, where light breezes create virtually zero noticeable penalty, but winds starting around fifteen to eighteen miles per hour begin to noticeably suppress downfield passing efficiency, and winds pushing past twenty five miles per hour severely cap total pass attempts or compress play calling into short yardage dink and dunk passing games.

Pressure context matters because a high pressure defensive matchup paired with a conservative offensive coordinator will often result in a sharp reduction in total pass attempts, whereas that same high pressure environment paired with an aggressive pass happy coordinator might actually spike attempt numbers through quick game screens and run pass options.

Personnel availability dictates that losing elite pass catchers reduces overall passing expectations, especially if the franchise lacked quality depth entering the contest, while offensive line cluster injuries severely depress attempt projections when combined with elite opposing pass rushes.

Calibration details, producing trustworthy intervals for props

Producing trustworthy prediction intervals for player prop betting markets requires parameterizing variance properly across different modeling families. Negative binomial models compute analytical quantiles using estimated overdispersion parameters, while gradient boosted tree models utilize quantile regression heads or bootstrapped predictions combined with isotonic calibration to ensure interval coverage matches nominal targets.

Bayesian models leverage posterior predictive draws to generate natural probability distributions for every single game matchup. Reliability checks broken down by wind buckets and point spreads confirm whether our eighty percent predictive intervals actually hit close to eighty percent empirical accuracy over large sample sizes, ensuring we never misprice tail risks on heavy underdogs or extreme weather games.

Using the model at ATSwins, from projection to pick

Integrating our pass attempt projections directly into the ATSwins ecosystem allows us to attack player props by mapping quarterback attempt means and predictive intervals straight to sportsbook over under lines, hunting for mispriced numbers that carry stable mathematical edges. Market timing plays a massive role as totals drift throughout the week, letting us front run closing lines when our weather or coaching intelligence leads the broader betting market. Stacks and correlations across receiving props benefit from utilizing the exact same underlying game script scenario trees, which prevents double counting risk across correlated markets.

Product integration displays historical comparisons and splits for total transparency, alongside subgroup reliability metrics so users can see how accurately our intervals perform in high wind environments. You can find these projections seamlessly plugged into our bet tracking and pick generation tools across the platform.

Templates you can reuse, checklists, configs, and feature map

Maintaining a rigorous weekly checklist ensures nothing falls through the cracks. On Monday, you refresh play by play data, rebuild rolling features, and publish preliminary baseline ranges. Wednesday brings injury report updates and route participation adjustments, followed by generalized linear model reruns and feature importance checks. Friday locks in weather forecasts, executes the hierarchical Bayesian master run, and calibrates final predictive intervals. Sunday morning applies active roster statuses and final odds locks, pushing clean projections to the props board alongside automated sanity checks.

Your feature map should categorize game script metrics, team DNA indicators, market snapshots, personnel availability flags, pressure and coverage contexts, weather buckets, and calendar variables into clean configuration files that govern training and scoring pipelines.

Troubleshooting and common pitfalls, things that break projections

Every data scientist building sports models runs into frustrating pitfalls that can completely ruin their predictive edges if left unchecked. Data leakage is the number one killer, usually happening when season to date rolling means accidentally include statistics from the target week itself, which must be strictly prevented by enforcing hard week cutoffs in your SQL or Python queries. Overfitting to early season noise is another classic trap, because small sample sizes for pass rate over expectation and pace will naturally swing wildly during the first month of the season, requiring proper priors and exponential weighting to calm things down. Weather forecast drift will drive you crazy if you constantly overreact to tiny hourly wind shifts, so you should only trigger model reclassifications when forecasts cross legitimate operational wind buckets. Miscounting spikes and kneels in your play by play aggregation scripts will distort your baseline targets, so always cross reference your numbers against verified box scores. Quarterback ownership errors happen instantly when a surprise backup gets a late start, meaning you need live backup start probability inputs to dynamically reallocate team pass attempts. Ignoring offensive line injuries is fatal, so keeping a real time tracker of tackle and guard statuses allows your system to apply emergency pressure penalties before kickoff. Finally, calibration decay happens as betting markets evolve, requiring you to recalibrate your probability intervals monthly using the latest several weeks of out of sample data.

Worked example, turning a Sunday slate into numbers

Walking through a concrete example helps clarify how all these moving pieces come together on a busy Sunday slate. Imagine we are setting up our model for a marquee Week Nine matchup. We pull the latest odds and weather on Saturday night, locking our point spread and game total right before midnight. The final injury report drops and shows that Team A is missing their star wide receiver, while Team B is getting their starting left tackle back from a multi week injury absence.

We feed the feature highlights into our pipeline, noting that Team A has seen their neutral pass rate and pass rate over expectation climb over the past three weeks, but losing their top target introduces uncertainty, though their offensive line remains fully intact against an opponent that brings heavy blitz pressure. Team B operates at a much faster pace, sits as a slight underdog in a game with a high total of forty nine points, and plays in a stadium with manageable twelve mile per hour winds that fall well below our penalty threshold.

Our model outputs generate a mean projection for Team A of thirty six point eight pass attempts, with a fifty percent predictive interval ranging from thirty four to thirty nine attempts, and an eighty percent interval stretching from thirty one to forty two attempts. The starting quarterback for Team A commands a ninety eight percent share of those attempts since the backup is unlikely to see meaningful snaps. Team B projects for thirty eight point five total pass attempts, with a fifty percent interval between thirty six and forty one, and an eighty percent band from thirty three to forty four.

We then run sensitivity checks. If the wind forecast jumps past eighteen miles per hour by Sunday morning, Team B is projected to drop roughly one point seven pass attempts on average, shifting our eighty percent interval downward by about two attempts. If the missing wide receiver for Team A is suddenly announced as active prior to kickoff, we add zero point eight attempts to our mean and tighten our predictive interval slightly.

From a betting perspective, if a local sportsbook posts the opposing quarterback over under line at thirty five point five pass attempts at standard juice, and our model outputs a mean of thirty eight point five with a sixty three percent true probability of hitting the over, our fair pricing suggests significant value, allowing us to take the over within strict Kelly criterion bankroll management limits.

How to scale this for a full season, operations that keep the edges coming

Scaling a modeling operation across a grueling eighteen week National Football League regular season requires fully automating your rolling windows, feature engineering pipelines, and opponent adjustments with heavily tested software utilities. Maintaining a weekly model card that tracks top positive and negative projection movers, underlying drivers like injuries and market shifts, subgroup coverage diagnostics, and any sudden bug fixes or data source revisions is essential for long term health.

Keeping a detailed scenario table for every single game covering baseline, high wind, backup quarterback, and blowout scripts lets you post expected attempt shifts directly inside your analytical workflow so analysts can visualize contingencies instantly. Monitoring live market drift ensures that if totals surge across the board on Sunday morning, your attempt projections reflect those broader market movements automatically through hourly refreshed odds snapshots.

Helpful external resources, for data, docs, and validation

While you build out your architecture, relying on established open source hubs, play by play schema repositories, tracking data documentation libraries, machine learning preprocessing guides, and historical box score archives will keep your code clean, your data pipelines robust, and your validation methodologies airtight as you scale your sports prediction workflows.

Final checklist, what to confirm before you ship weekly projections

Before you officially ship your weekly projections to production, you need to execute a final quality control checklist. Verify your data currency by checking odds snapshot timestamps and sources, weather forecast retrieval times, and the absolute completeness of injury status updates. Confirm feature integrity by making sure all opponent adjustments were computed strictly using past data with zero leakage from same week statistics. Check model health by verifying that predictive interval coverage remained within acceptable tolerance bands over the past month and that feature importance metrics show no strange algorithmic spikes. Validate final outputs to ensure team and quarterback attempt projections include complete fifty, eighty, and ninety five percent predictive intervals alongside comprehensive difference reports versus prior runs tagged with clear driver labels. Finally, align your product pipeline by cross referencing player prop mappings against current sportsbook lines, logging all mathematical edges in your profit tracking database, and ensuring scenario notes are clearly visible to users and analysts alike.

This entire analytical approach is intentionally built to be hyper practical for everyday sports bettors and serious football analysts. Weekly pass attempts are certainly not the only driver of passing yardage or touchdown production, but they serve as the absolute strongest foundational starting point for building a cohesive passing ecosystem that flows downstream into wide receiver, tight end, and running back receptions and yards. When you properly control for weather, betting market movements, coaching philosophies, and player injuries, you unlock reliable projections that move much faster than the closing betting market, giving you a consistent edge over the long run.

Conclusion

We set out to project weekly National Football League pass attempts by tying pace, pass rate over expectation, betting lines, weather, and injuries into actionable projection ranges. The key takeaways are to anchor heavily on neutral script tendencies, adjust dynamically for sharp market movements, keep your machine learning models properly calibrated, and continuously update your inputs as new information becomes available. For anyone looking to put these insights into immediate action, ATSwins is an advanced artificial intelligence powered sports prediction platform offering data driven picks, player props, betting splits, and profit tracking across the National Football League, National Basketball Association, Major League Baseball, National Hockey League, and college sports, where free and paid plans give bettors the exact tools, insights, and guides they need to make smarter and more informed betting decisions every week.

Frequently Asked Questions (FAQs)

What is an NFL pass attempts projection model, and why does it matter?

An National Football League pass attempts projection model estimates how many times a quarterback will drop back and throw the football in any given game. It ingests game pace, neutral script pass rate, pass rate over expectation, coaching tendencies, weather conditions, player injuries, and betting lines to output a highly realistic statistical range. This matters immensely because passing volume drives the most profitable betting edges in player props, daily fantasy sports, season long fantasy leagues, and advanced matchup analysis. If your projection model is properly calibrated, you will spot soft betting lines early in the week and completely avoid noisy statistical outliers that tend to burn bankrolls over the course of a long season.

What inputs should I collect to power an NFL pass attempts projection model each week?

To build a practical projection model, you need to focus on repeatable and timely signals. This includes pace and play volume metrics like seconds per snap, no huddle rates, and saved timeouts pulled from play by play feeds. Script and tendency metrics like neutral script pass rate and pass rate over expectation by team, quarterback, and coordinator are crucial, utilizing rolling three to six game windows alongside prior season priors. Market context from regulated sportsbooks provides point spreads and game totals that anchor overall expectations. Personnel availability tracking for wide receivers, tight ends, and running backs paired with snap logs helps evaluate skill position depth. Trenches data covering pressure rates allowed versus generated and quick game rates gives you insight into offensive line stability. Weather and venue variables covering domes versus outdoor wind buckets and precipitation help quantify environmental suppression. Finally, game logistics like rest days, short weeks, and travel time zones feed into the model to capture base identity and week specific shocks.

How do I build and update an NFL pass attempts projection model, step by step?

Building a clean process starts with defining your target as regulation pass attempts while excluding spikes and kneels. Next, you engineer features covering pass rate over expectation, seconds per snap, trailing win probability rates, spread and total buckets, route participation, pressure mismatches, dome and wind flags, and coaching tenures. You smooth and pool your data by blending rolling statistics with team, quarterback, and coordinator priors so small sample sizes do not cause erratic swings. You train your models starting simple with ridge regression, moving into count models like Poisson and negative binomial regressions, and graduating to tree ensembles like gradient boosted trees while tracking mean absolute percentage error and interval coverage. You validate everything using walk forward cross validation splits by week and season, calibrating your prediction intervals carefully. Finally, your game day refresh updates injuries, inactive players, weather reports, and late line moves, allowing you to re run the model sixty to ninety minutes before kickoff in a repeatable loop that keeps projections stable and timely.

How do I check if my NFL pass attempts projection model is accurate?

Checking model accuracy requires honest, rigorous backtesting. For a professional pass attempts model, you should use rolling origin cross validation spanning multiple historical seasons without ever peeking at future data. You must report mean absolute error and mean absolute percentage error, but you also need to check interval coverage to see if your eighty percent predictive intervals actually hit roughly eighty percent of the time in out of sample tests. Plotting your residuals against wind speeds, point spreads, and game pace will help you spot systematic bias in blowouts or extreme weather games. Comparing your model output to simple baselines like last three game averages or prior season means is mandatory, because if your complex machine learning pipeline cannot beat a simple average, you need to fix your feature engineering before doing any hyperparameter tuning. Checking week to week stability is also vital, as massive projection swings without accompanying injuries or scheme changes usually signal dangerous overfitting. Once your model passes these tests and stays calibrated, you are ready to stake edges carefully.

How does ATSwins.ai use an NFL pass attempts projection model to deliver smarter picks and props?

We fuse our pass attempt projection model directly into a broader, highly sophisticated decision stack over at ATSwins.ai, which is an artificial intelligence powered sports prediction platform offering data driven picks, player props, betting splits, and profit tracking across the National Football League, National Basketball Association, Major League Baseball, National Hockey League, and college athletics. Free and paid plans give everyday bettors the exact insights and guides they need to make smarter and more informed decisions. In practical terms, our model sets precise pass attempt ranges, stress tests those projections against changing weather forecasts and sharp betting market drift, and then flags highly playable edges whenever price and true probability align favorably. We also track historical outcomes so users can see exactly what is working and what is not, successfully closing the loop for continuous operational improvement. Utilizing an integrated ai baseball game analysis framework, a dedicated nfl player prop edge finder, and a powerful multi-sport sports probability engine, the platform ensures you have the technical horsepower required to stay ahead of the closing lines.