Script 873: 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 90% or more of the daily budget. These campaigns are tagged as “Budget Capped” to indicate that their spending is close to or exceeding the allocated budget. The script considers additional factors such as the “iDNE” value (a numeric column) and the “Lost Imp Share” percentage to determine if a campaign should be tagged.
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 new columns in the input dataframe.
- A threshold value of 0.90 is set to determine when the publisher cost exceeds 90% of the daily budget.
- The script updates the “Budget Alert” column in the input dataframe based on the following conditions:
- If the “Pub Cost / Budget” ratio is less than the threshold, the “Budget Alert” column is set to an empty string.
- If the “Pub Cost / Budget” ratio is greater than or equal to the threshold, the “iDNE” value is less than 1.5, and the “Lost Imp Share” is greater than 10, the “Budget Alert” column is set to “Budget Capped”.
- The modified input dataframe is printed.
- The script selects specific columns from the input dataframe and assigns them to the output dataframe.
Vitals
- Script ID : 873
- Client ID / Customer ID: 1306916781 / 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:43
- Last Updated by Stephen Malina on 2024-04-23 20:34
> 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