Close Menu
    Trending
    • Gemini introducerar funktionen schemalagda åtgärder i Gemini-appen
    • AIFF 2025 Runway’s tredje årliga AI Film Festival
    • AI-agenter kan nu hjälpa läkare fatta bättre beslut inom cancervård
    • Not Everything Needs Automation: 5 Practical AI Agents That Deliver Enterprise Value
    • Prescriptive Modeling Unpacked: A Complete Guide to Intervention With Bayesian Modeling.
    • 5 Crucial Tweaks That Will Make Your Charts Accessible to People with Visual Impairments
    • Why AI Projects Fail | Towards Data Science
    • The Role of Luck in Sports: Can We Measure It?
    ProfitlyAI
    • Home
    • Latest News
    • AI Technology
    • Latest AI Innovations
    • AI Tools & Technologies
    • Artificial Intelligence
    ProfitlyAI
    Home » Time Series Forecasting Made Simple (Part 2): Customizing Baseline Models
    Artificial Intelligence

    Time Series Forecasting Made Simple (Part 2): Customizing Baseline Models

    ProfitlyAIBy ProfitlyAIMay 9, 2025No Comments20 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Telegram Email
    Share
    Facebook Twitter LinkedIn Pinterest Email


    you for the sort response to Half 1, it’s been encouraging to see so many readers thinking about time collection forecasting.

    In Part 1 of this series, we broke down time collection knowledge into pattern, seasonality, and noise, mentioned when to make use of additive versus multiplicative fashions, and constructed a Seasonal Naive baseline forecast utilizing Every day Temperature Knowledge. We evaluated its efficiency utilizing MAPE (Imply Absolute Proportion Error), which got here out to twenty-eight.23%.

    Whereas the Seasonal Naive mannequin captured the broad seasonal sample, we additionally noticed that it will not be the very best match for this dataset, because it doesn’t account for refined shifts in seasonality or long-term tendencies. This highlights the necessity to transcend primary baselines and customise forecasting fashions to higher replicate the underlying knowledge for improved accuracy.

    Once we utilized the Seasonal Naive baseline mannequin, we didn’t account for the pattern or use any mathematical formulation, we merely predicted every worth based mostly on the identical day from the earlier yr.

    First, let’s check out the desk under, which outlines some frequent baseline fashions and when to make use of every one.

    Desk: Frequent baseline forecasting fashions, their descriptions, and when to make use of every based mostly on knowledge patterns.

    These are among the mostly used baseline fashions throughout varied industries.

    However what if the info reveals each pattern and seasonality? In such instances, these easy baseline fashions won’t be sufficient. As we noticed in Half 1, the Seasonal Naive mannequin struggled to totally seize the patterns within the knowledge, leading to a MAPE of 28.23%.

    So, ought to we soar straight to ARIMA or one other advanced forecasting mannequin?

    Not essentially.

    Earlier than reaching for superior instruments, we will first construct our baseline mannequin based mostly on the construction of the info. This helps us construct a stronger benchmark — and infrequently, it’s sufficient to determine whether or not a extra subtle mannequin is even wanted.

    Now that we’ve examined the construction of the info, which clearly contains each pattern and seasonality, we will construct a baseline mannequin that takes each elements under consideration.

    In Half 1, we used the seasonal decompose technique in Python to visualise the pattern and seasonality in our knowledge. Now, we’ll take this a step additional by truly extracting the pattern and seasonal elements from that decomposition and utilizing them to construct a baseline forecast.

    Decomposition of each day temperatures displaying pattern, seasonal cycles and random fluctuations.

    However earlier than we get began, let’s see how the seasonal decompose technique figures out the pattern and seasonality in our knowledge.

    Earlier than utilizing the built-in perform, let’s take a small pattern from our temperature knowledge and manually undergo how the seasonal_decompose technique separates pattern, seasonality and residuals.

    This can assist us perceive what’s actually taking place behind the scenes.

    Pattern from Temperatures Knowledge

    Right here, we contemplate a 14-day pattern from the temperature dataset to higher perceive how decomposition works step-by-step.

    We already know that this dataset follows an additive construction, which implies every noticed worth is made up of three elements:

    Noticed Worth = Development + Seasonality + Residual.

    First, let’s take a look at how the pattern is calculated for this pattern.
    We’ll use a 3-day centered shifting common, which implies every worth is averaged with its speedy neighbor on either side. This helps clean out day-to-day variations within the knowledge.

    For instance, to calculate the pattern for February 1, 1981:
    Development = (20.7 + 17.9 + 18.8) / 3
    = 19.13

    This manner, we calculate the pattern element for all 14 days within the pattern.

    Right here’s the desk displaying the 3-day centered shifting common pattern values for every day in our 14-day pattern.

    As we will see, the pattern values for the primary and final dates are ‘NaN’ as a result of there aren’t sufficient neighboring values to calculate a centered common at these factors.

    We’ll revisit these lacking values as soon as we end computing the seasonality and residual elements.

    Earlier than we dive into seasonality, there’s one thing we stated earlier that we must always come again to. We talked about that utilizing a 3-day centered shifting common helps in smoothing out everyday variations within the knowledge — however what does that basically imply?
    Let’s take a look at a fast instance to make it clearer.

    We’ve already mentioned that the pattern displays the general path the info is shifting in.

    Temperatures are usually increased in summer time and decrease in winter, that’s the broad seasonal sample we count on.

    However even inside summer time, temperatures don’t keep precisely the identical each day. Some days may be barely cooler or hotter than others. These are pure each day fluctuations, not indicators of sudden local weather shifts.

    The shifting common helps us clean out these short-term ups and downs so we will give attention to the larger image, the underlying pattern throughout time.

    Since we’re working with a small pattern right here, the pattern might not stand out clearly simply but.

    However if you happen to take a look at the total decomposition plot above, you may see how the pattern captures the general path the info is shifting in, steadily rising, falling or staying regular over time.

    Now that we’ve calculated the pattern, it’s time to maneuver on to the subsequent element: seasonality.

    We all know that in an additive mannequin:
    Noticed Worth = Development + Seasonality + Residual

    To isolate seasonality, we begin by subtracting the pattern from the noticed values:
    Noticed Worth – Development = Seasonality + Residual

    The outcome is named the detrended collection — a mix of the seasonal sample and any remaining random noise.

    Let’s take January 2, 1981 for example.

    Noticed temperature: 17.9°C

    Development: 19.13°C

    So, the detrended worth is:

    Detrended = 17.9 – 19.1 = -1.23

    In the identical method, we calculate the detrended values for all of the dates in our pattern.

    The desk above reveals the detrended values for every date in our 14-day pattern.

    Since we’re working with 14 consecutive days, we’ll assume a weekly seasonality and assign a Day Index (from 1 to 7) to every date based mostly on its place in that 7-day cycle.

    Now, to estimate seasonality, we take the typical of the detrended values that share the identical Day Index.

    Let’s calculate the seasonality for January 2, 1981. The Day Index for this date is 2, and the opposite date in our pattern with the identical index is January 9, 1981. To estimate the seasonal impact for this index, we take the typical of the detrended values from each days. This seasonal impact will then be assigned to each date with Index 2 in our cycle.

    for January 2, 1981: Detrended worth = -1.2 and
    for January 9, 1981: Detrended worth = 2.1

    Common of each values = (-1.2 + 2.1)/2
    = 0.45

    So, 0.45 is the estimated seasonality for all dates with Index 2.
    We repeat this course of for every index to calculate the total set of seasonality elements.

    Listed here are the values of seasonality for all of the dates and these seasonal values replicate the recurring sample throughout the week. For instance, days with Index 2 are typically round 0.45oC hotter than the pattern on common, whereas days with Index 4 are typically 1.05oC cooler.

    Notice: Once we say that days with Index 2 are typically round +0.45°C hotter than the pattern on common, we imply that dates like Jan 2 and Jan 9 are typically about 0.45°C above their very own pattern worth, not in comparison with the general dataset pattern, however to the native pattern particular to every day.

    Now that we’ve calculated the seasonal elements for every day, you may discover one thing fascinating: even the dates the place the pattern (and due to this fact detrended worth) was lacking, like the primary and final dates in our pattern — nonetheless obtained a seasonality worth.

    It is because seasonality is assigned based mostly on the Day Index, which follows a repeating cycle (like 1 to 7 in our weekly instance).
    So, if January 1 has a lacking pattern however shares the identical index as, say, January 8, it inherits the identical seasonal impact that was calculated utilizing legitimate knowledge from that index group.

    In different phrases, seasonality doesn’t depend upon the supply of pattern for that particular day, however fairly on the sample noticed throughout all days with the identical place within the cycle.

    Now we calculate the residual, based mostly on the additive decomposition construction we all know that:
    Noticed Worth = Development + Seasonality + Residual
    …which implies:
    Residual = Noticed Worth – Development – Seasonality

    You may be questioning, if the detrended values we used to calculate seasonality already had residuals in them, how can we separate them now? The reply comes from averaging. Once we group the detrended values by their seasonal place, like Day Index, the random noise tends to cancel itself out. What we’re left with is the repeating seasonal sign. In small datasets this won’t be very noticeable, however in bigger datasets, the impact is way more clear. And now, with each pattern and seasonality eliminated, what stays is the residual.

    We are able to observe that residuals aren’t calculated for the primary and final dates, because the pattern wasn’t accessible there because of the centered shifting common.

    Let’s check out the ultimate decomposition desk for our 14-day pattern. This brings collectively the noticed temperatures, the extracted pattern and seasonality elements, and the ensuing residuals.

    Now that we’ve calculated the pattern, seasonality, and residuals for our pattern, let’s come again to the lacking values we talked about earlier. If you happen to take a look at the decomposition plot for the total dataset, titled “Decomposition of each day temperatures displaying pattern, seasonal cycles, and random fluctuations”, you’ll discover that the pattern line doesn’t seem proper firstly of the collection. The identical applies to residuals. This occurs as a result of calculating the pattern requires sufficient knowledge earlier than and after every level, so the primary few and previous few values don’t have an outlined pattern. That’s additionally why we see lacking residuals on the edges. However in massive datasets, these lacking values make up solely a small portion and don’t have an effect on the general interpretation. You may nonetheless clearly see the pattern and patterns over time. In our small 14-day pattern, these gaps really feel extra noticeable, however in real-world time collection knowledge, that is fully regular and anticipated.

    Now that we’ve understood how seasonal_decompose works, let’s take a fast take a look at the code we used to use it to the temperature knowledge and extract the pattern and seasonality elements.

    import pandas as pd
    import matplotlib.pyplot as plt
    from statsmodels.tsa.seasonal import seasonal_decompose
    
    # Load the dataset
    df = pd.read_csv("minimal each day temperatures knowledge.csv")
    
    # Convert 'Date' to datetime and set as index
    df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
    df.set_index('Date', inplace=True)
    
    # Set an everyday each day frequency and fill lacking values utilizing ahead fill
    df = df.asfreq('D')
    df['Temp'].fillna(technique='ffill', inplace=True)
    
    # Decompose the each day collection (365-day seasonality for yearly patterns)
    decomposition = seasonal_decompose(df['Temp'], mannequin='additive', interval=365)
    
    # Plot the decomposed elements
    decomposition.plot()
    plt.suptitle('Decomposition of Every day Minimal Temperatures (Every day)', fontsize=14)
    plt.tight_layout()
    plt.present()

    Let’s give attention to this a part of the code:

    decomposition = seasonal_decompose(df['Temp'], mannequin='additive', interval=365)

    On this line, we’re telling the perform what knowledge to make use of (df['Temp']), which mannequin to use (additive), and the seasonal interval to think about (365), which matches the yearly cycle in our each day temperature knowledge.

    Right here, we set interval=365 based mostly on the construction of the info. This implies the pattern is calculated utilizing a 365-day centered shifting common, which takes 182 values earlier than and after every level. The seasonality is calculated utilizing a 365-day seasonal index, the place all January 1st values throughout years are grouped and averaged, all January 2nd values are grouped, and so forth.

    When utilizing seasonal_decompose in Python, we merely present the interval, and the perform makes use of that worth to find out how each the pattern and seasonality must be calculated.

    In our earlier 14-day pattern, we used a 3-day centered common simply to make the maths extra comprehensible — however the underlying logic stays the identical.

    Now that we’ve explored how seasonal_decompose works and understood the way it separates a time collection into pattern, seasonality, and residuals, we’re able to construct a baseline forecasting mannequin.
    This mannequin might be constructed by merely including the extracted pattern and seasonality elements, basically assuming that the residual (or noise) is zero.

    As soon as we generate these baseline forecasts, we’ll consider how properly they carry out by evaluating them to the precise noticed values utilizing MAPE (Imply Absolute Proportion Error).

    Right here, we’re ignoring the residuals as a result of we’re constructing a easy baseline mannequin that serves as a benchmark. The purpose is to check whether or not extra superior algorithms are actually needed.
    We’re primarily thinking about seeing how a lot of the variation within the knowledge will be defined utilizing simply the pattern and seasonality elements.

    Now we’ll construct a baseline forecast by extracting the pattern and seasonality elements utilizing Python’s seasonal_decompose.

    Code:

    import pandas as pd
    import matplotlib.pyplot as plt
    from statsmodels.tsa.seasonal import seasonal_decompose
    from sklearn.metrics import mean_absolute_percentage_error
    
    # Load the dataset
    df = pd.read_csv("/minimal each day temperatures knowledge.csv")
    
    # Convert 'Date' to datetime and set as index
    df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
    df.set_index('Date', inplace=True)
    
    # Set an everyday each day frequency and fill lacking values utilizing ahead fill
    df = df.asfreq('D')
    df['Temp'].fillna(technique='ffill', inplace=True)
    
    # Break up into coaching (all years besides remaining) and testing (remaining yr)
    practice = df[df.index.year < df.index.year.max()]
    take a look at = df[df.index.year == df.index.year.max()]
    
    # Decompose coaching knowledge solely
    decomposition = seasonal_decompose(practice['Temp'], mannequin='additive', interval=365)
    
    # Extract elements
    pattern = decomposition.pattern
    seasonal = decomposition.seasonal
    
    # Use final full yr of seasonal values from coaching to repeat for take a look at
    seasonal_values = seasonal[-365:].values
    seasonal_test = pd.Sequence(seasonal_values[:len(test)], index=take a look at.index)
    
    # Lengthen final legitimate pattern worth as fixed throughout the take a look at interval
    trend_last = pattern.dropna().iloc[-1]
    trend_test = pd.Sequence(trend_last, index=take a look at.index)
    
    # Create baseline forecast
    baseline_forecast = trend_test + seasonal_test
    
    # Consider utilizing MAPE
    precise = take a look at['Temp']
    masks = precise > 1e-3  # keep away from division errors on near-zero values
    mape = mean_absolute_percentage_error(precise[mask], baseline_forecast[mask])
    print(f"MAPE for Baseline Mannequin on Remaining 12 months: {mape:.2%}")
    
    # Plot precise vs. forecast
    plt.determine(figsize=(12, 5))
    plt.plot(precise.index, precise, label='Precise', linewidth=2)
    plt.plot(precise.index, baseline_forecast, label='Baseline Forecast', linestyle='--')
    plt.title('Baseline Forecast vs. Precise (Remaining 12 months)')
    plt.xlabel('Date')
    plt.ylabel('Temperature (°C)')
    plt.legend()
    plt.tight_layout()
    plt.present()
    
    
    MAPE for Baseline Mannequin on Remaining 12 months: 21.21%
    

    Within the code above, we first cut up the info by utilizing the primary 9 years because the coaching set and the ultimate yr because the take a look at set.

    We then utilized seasonal_decompose to the coaching knowledge to extract the pattern and seasonality elements.

    Because the seasonal sample repeats yearly, we took the final 365 seasonal values and utilized them to the take a look at interval.

    For the pattern, we assumed it stays fixed and used the final noticed pattern worth from the coaching set throughout all dates within the take a look at yr.

    Lastly, we added the pattern and seasonality elements to construct the baseline forecast, in contrast it with the precise values from the take a look at set, and evaluated the mannequin utilizing Imply Absolute Proportion Error (MAPE).

    We obtained a MAPE of 21.21% with our baseline mannequin. In Half 1, the seasonal naive strategy gave us 28.23%, so we’ve improved by about 7%.

    What we’ve constructed right here just isn’t a customized baseline mannequin — it’s a normal decomposition-based baseline.

    Let’s now see how we will give you our personal customized baseline for this temperature knowledge.

    Now let’s contemplate the typical of temperatures grouped by every day and utilizing them forecast the temperatures for remaining yr.

    You may be questioning how we even give you that concept for a customized baseline within the first place. Truthfully, it begins by merely trying on the knowledge. If we will spot a sample, like a seasonal pattern or one thing that repeats over time, we will construct a easy rule round it.

    That’s actually what a customized baseline is about — utilizing what we perceive from the info to make an inexpensive prediction. And infrequently, even small, intuitive concepts can work surprisingly properly.

    Now let’s use Python to calculate the typical temperature for every day of the yr.

    Code:

    # Create a brand new column 'day_of_year' representing which day (1 to 365) every date falls on
    practice["day_of_year"] = practice.index.dayofyear
    take a look at["day_of_year"] = take a look at.index.dayofyear
    
    # Group the coaching knowledge by 'day_of_year' and calculate the imply temperature for every day (averaged throughout all years)
    daily_avg = practice.groupby("day_of_year")["Temp"].imply()
    
    # Use the discovered seasonal sample to forecast take a look at knowledge by mapping take a look at days to the corresponding each day common
    day_avg_forecast = take a look at["day_of_year"].map(daily_avg)
    
    # Consider the efficiency of this seasonal baseline forecast utilizing Imply Absolute Proportion Error (MAPE)
    mape_day_avg = mean_absolute_percentage_error(take a look at["Temp"], day_avg_forecast)
    spherical(mape_day_avg * 100, 2)

    To construct this tradition baseline, we checked out how the temperature usually behaves on every day of the yr, averaging throughout all of the coaching years. Then, we used these each day averages to make predictions for the take a look at set. It’s a easy method to seize the seasonal sample that tends to repeat yearly.

    This tradition baseline gave us a MAPE of 21.17%, which reveals how properly it captures the seasonal pattern within the knowledge.

    Now, let’s see if we will construct one other customized baseline that captures patterns within the knowledge extra successfully and serves as a stronger benchmark.

    Now that we’ve used the day-of-year common technique for our first customized baseline, you may begin questioning what occurs in leap years. If we merely quantity the times from 1 to 365 and take the typical, we might find yourself misled, particularly round February 29.

    You may be questioning if a single date actually issues. In time collection evaluation, each second counts. It could not really feel that necessary proper now since we’re working with a easy dataset, however in real-world conditions, small particulars like this will have a huge impact. Many industries pay shut consideration to those patterns, and even a one-day distinction can have an effect on choices. That’s why we’re beginning with a easy dataset, to assist us perceive these concepts clearly earlier than making use of them to extra advanced issues.

    Now let’s construct a customized baseline utilizing calendar-day averages by taking a look at how the temperature often behaves on every (month, day) throughout years.

    It’s a easy method to seize the seasonal rhythm of the yr based mostly on the precise calendar.

    Code:

    # Extract the 'month' and 'day' from the datetime index in each coaching and take a look at units
    practice["month"] = practice.index.month
    practice["day"] = practice.index.day
    take a look at["month"] = take a look at.index.month
    take a look at["day"] = take a look at.index.day
    
    
    # Group the coaching knowledge by every (month, day) pair and calculate the typical temperature for every calendar day
    calendar_day_avg = practice.groupby(["month", "day"])["Temp"].imply()
    
    
    # Forecast take a look at values by mapping every take a look at row's (month, day) to the typical from coaching knowledge
    calendar_day_forecast = take a look at.apply(
        lambda row: calendar_day_avg.get((row["month"], row["day"]), np.nan), axis=1
    )
    
    # Consider the forecast utilizing Imply Absolute Proportion Error (MAPE)
    mape_calendar_day = mean_absolute_percentage_error(take a look at["Temp"], calendar_day_forecast)

    Utilizing this technique, we achieved a MAPE of 21.09%.

    Now let’s see if we will mix two strategies to construct a extra refined customized baseline. We’ve got already created a calendar-based month-day common baseline. This time we’ll mix it with the day past’s precise temperature. The forecasted worth might be based mostly 70 % on the calendar day common and 30 % on the day past’s temperature, making a extra balanced and adaptive prediction.

    # Create a column with the day past's temperature 
    df["Prev_Temp"] = df["Temp"].shift(1)
    
    # Add the day past's temperature to the take a look at set
    take a look at["Prev_Temp"] = df.loc[test.index, "Prev_Temp"]
    
    # Create a blended forecast by combining calendar-day common and former day's temperature
    # 70% weight to seasonal calendar-day common, 30% to earlier day temperature
    
    blended_forecast = 0.7 * calendar_day_forecast.values + 0.3 * take a look at["Prev_Temp"].values
    
    # Deal with lacking values by changing NaNs with the typical of calendar-day forecasts
    blended_forecast = np.nan_to_num(blended_forecast, nan=np.nanmean(calendar_day_forecast))
    
    # Consider the forecast utilizing MAPE
    mape_blended = mean_absolute_percentage_error(take a look at["Temp"], blended_forecast)
    

    We are able to name this a blended customized baseline mannequin. Utilizing this strategy, we achieved a MAPE of 18.73%.

    Let’s take a second to summarize what we’ve utilized to this dataset up to now utilizing a easy desk.

    In Half 1, we used the seasonal naive technique as our baseline. On this weblog, we explored how the seasonal_decompose perform in Python works and constructed a baseline mannequin by extracting its pattern and seasonality elements. We then created our first customized baseline utilizing a easy thought based mostly on the day of the yr and later improved it by utilizing calendar day averages. Lastly, we constructed a blended customized baseline by combining the calendar common with the day past’s temperature, which led to even higher forecasting outcomes.

    On this weblog, we used a easy each day temperature dataset to know how custom baseline models work. Because it’s a univariate dataset, it incorporates solely a time column and a goal variable. Nonetheless, real-world time collection knowledge is usually way more advanced and usually multivariate, with a number of influencing elements. Earlier than we discover the right way to construct customized baselines for such advanced datasets, we have to perceive one other necessary decomposition technique known as STL decomposition. We additionally want a strong grasp of univariate forecasting fashions like ARIMA and SARIMA. These fashions are important as a result of they kind the muse for understanding and constructing extra superior multivariate time collection fashions.

    In Half 1, I discussed that we’d discover the foundations of ARIMA on this half as properly. Nonetheless, as I’m additionally studying and wished to maintain issues centered and digestible, I wasn’t in a position to match all the things into one weblog. To make the educational course of smoother, we’ll take it one matter at a time.

    In Half 3, we’ll discover STL decomposition and proceed constructing on what we’ve discovered up to now.

    Dataset and License
    The dataset used on this article — “Every day Minimal Temperatures in Melbourne” — is out there on Kaggle and is shared below the Group Knowledge License Settlement – Permissive, Model 1.0 (CDLA-Permissive 1.0).
    That is an open license that allows industrial use with correct attribution. You may learn the total license here.

    I hope you discovered this half useful and straightforward to comply with.
    Thanks for studying and see you in Half 3!



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleHow Not to Write an MCP Server
    Next Article Log Link vs Log Transformation in R — The Difference that Misleads Your Entire Data Analysis
    ProfitlyAI
    • Website

    Related Posts

    Artificial Intelligence

    Not Everything Needs Automation: 5 Practical AI Agents That Deliver Enterprise Value

    June 6, 2025
    Artificial Intelligence

    Prescriptive Modeling Unpacked: A Complete Guide to Intervention With Bayesian Modeling.

    June 6, 2025
    Artificial Intelligence

    5 Crucial Tweaks That Will Make Your Charts Accessible to People with Visual Impairments

    June 6, 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Top Posts

    AI Detection Is Too Unreliable for Our Classrooms

    April 3, 2025

    This patient’s Neuralink brain implant gets a boost from Grok

    May 7, 2025

    Anthropic can now track the bizarre inner workings of a large language model

    April 3, 2025

    Anthropic introducerar Integrations som ansluter användares appar och verktyg direkt till Claude

    May 3, 2025

    A Farewell to APMs — The Future of Observability is MCP tools

    May 2, 2025
    Categories
    • AI Technology
    • AI Tools & Technologies
    • Artificial Intelligence
    • Latest AI Innovations
    • Latest News
    Most Popular

    How do you teach an AI model to give therapy?

    April 3, 2025

    Microsoft Just Laid Off 6,000 Workers. And AI Might Be to Blame

    May 20, 2025

    Overcoming Challenges to Realize Benefits

    April 3, 2025
    Our Picks

    Gemini introducerar funktionen schemalagda åtgärder i Gemini-appen

    June 7, 2025

    AIFF 2025 Runway’s tredje årliga AI Film Festival

    June 7, 2025

    AI-agenter kan nu hjälpa läkare fatta bättre beslut inom cancervård

    June 7, 2025
    Categories
    • AI Technology
    • AI Tools & Technologies
    • Artificial Intelligence
    • Latest AI Innovations
    • Latest News
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us
    Copyright © 2025 ProfitlyAI All Rights Reserved.

    Type above and press Enter to search. Press Esc to cancel.