Script 863: Budget Capped Campaigns
Purpose
Python script to tag campaigns if the publisher cost for the prior day is 90% of the daily budget.
To Elaborate
The Python script aims to identify campaigns where the publisher cost for the previous day is close to or exceeds 90% of the daily budget. These campaigns are tagged as “Budget Capped” to alert the user. The script considers additional factors such as the “iDNE” value (a numeric column) and the “Lost Imp Share” percentage. The threshold for the publisher cost to budget ratio can be adjusted as needed.
Walking Through the Code
- The script defines column constants for various columns in the input and output dataframes.
- The “iDNE” column in the input dataframe is converted to numeric values.
- The script calculates the ratio of publisher cost to daily budget and adds it as a new column in the input dataframe.
- The “iDNE” and “Lost Imp Share” columns are copied to the input dataframe.
- The script tags campaigns as “Budget Capped” if the publisher cost to budget ratio is greater than or equal to the threshold (90%), the “iDNE” value is less than 1.5, and the “Lost Imp Share” is greater than 10%.
- The modified input dataframe is printed.
- The script selects specific columns from the input dataframe and creates a new output dataframe.
Vitals
- Script ID : 863
- Client ID / Customer ID: 247648668 / 13095968
- Action Type: Bulk Upload
- Item Changed: Campaign
- Output Columns: Account, Campaign, Budget Alert
- Linked Datasource: M1 Report
- Reference Datasource: None
- Owner: smalina@marinsoftware.com (smalina@marinsoftware.com)
- Created by Stephen Malina on 2024-03-29 16:32
- Last Updated by Stephen Malina on 2024-04-29 14:12
> See it in Action
Python Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#
# Tag campaign if Pub Cost for prior day is 90% of Daily Budget
#
#
# Author: Stephen Malina
# Date: 2024-03-27
RPT_COL_CAMPAIGN = 'Campaign'
RPT_COL_PUBLISHER = 'Publisher'
RPT_COL_PUB_COST = 'Pub. Cost £'
RPT_COL_ACCOUNT = 'Account'
RPT_COL_DAILY_BUDGET = 'Daily Budget'
RPT_COL_CAMPAIGN_STATUS = 'Campaign Status'
RPT_COL_BUDGET_ALERT = 'Budget Alert'
RPT_COL_iDNE = 'iDNE'
RPT_COL_LOST_IMP_SHARE = 'Lost Impr. Share (Budget) %'
BULK_COL_ACCOUNT = 'Account'
BULK_COL_CAMPAIGN = 'Campaign'
BULK_COL_BUDGET_ALERT = 'Budget Alert'
# Convert the 'iDNE' column to numeric values
inputDf[RPT_COL_iDNE] = pd.to_numeric(inputDf[RPT_COL_iDNE], errors='coerce')
# Calculate the difference between daily budget and pub cost, include iDNE for consideration
inputDf['Pub Cost / Budget'] = inputDf[RPT_COL_PUB_COST] / inputDf[RPT_COL_DAILY_BUDGET]
inputDf['iDNE'] = inputDf[RPT_COL_iDNE]
inputDf['Lost Imp Share'] = inputDf[RPT_COL_LOST_IMP_SHARE]
# Output a "Budget Cap Alert" where daily spend is greater than 90% of daily budget and iDNE is less than 1.5
threshold = 0.90 # Adjust this threshold as needed
inputDf.loc[inputDf['Pub Cost / Budget'] < threshold, BULK_COL_BUDGET_ALERT] = ""
inputDf.loc[(inputDf['Pub Cost / Budget'] >= threshold) & (inputDf['iDNE'] < 1.5) & (inputDf['Lost Imp Share'] > 10), BULK_COL_BUDGET_ALERT] = "Budget Capped"
# Print the modified inputDf
print(inputDf)
cols = [RPT_COL_ACCOUNT, RPT_COL_CAMPAIGN, BULK_COL_BUDGET_ALERT]
outputDf = inputDf[cols]
Post generated on 2024-05-15 07:44:05 GMT