当前位置: 首页 > news >正文

给网站做数据分析开发游戏需要什么条件

给网站做数据分析,开发游戏需要什么条件,wordpress自定义分类调用,网站建设ppt方案模板下载《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: 基于 VAE 的 Web 应用周期性 KPI 无监督异常检测9 异常检测资料汇总持续更新抛砖引玉10 Bagel: 基于条件 VAE 的鲁棒无监督KPI异常检测11 ADS: 针对大量出现的KPI流快速部署异常检测模型12 Buzz: 对复杂 KPI 基于VAE对抗训练的非监督异常检测13 MAD: 基于GANs的时间序列数据多元异常检测14 对于流数据基于 RRCF 的异常检测15 通过无监督和主动学习进行实用的白盒异常检测16 基于VAE和LOF的无监督KPI异常检测算法17 基于 VAE-LSTM 混合模型的时间异常检测18 USAD多元时间序列的无监督异常检测19 OmniAnomaly基于随机循环网络的多元时间序列鲁棒异常检测20 HotSpot多维特征 Additive KPI 的异常定位21 Anomaly Transformer: 基于关联差异的时间序列异常检测22 Kontrast: 通过自监督对比学习识别软件变更中的错误23 TimesNet: 用于常规时间序列分析的时间二维变化模型24 TSB-UAD用于单变量时间序列异常检测的端到端基准套件25 DIF基于深度隔离林的异常检测算法26 Time-LLM基于大语言模型的时间序列预测27 Dejavu: Actionable and Interpretable Fault Localization for Recurring Failures in Online Service Systems28 UNRAVEL ANOMALIES基于周期与趋势分解的时间序列异常检测端到端方法 相关 VAE 模型基本原理简单介绍 GAN 数学原理简单介绍以及代码实践 单指标时间序列异常检测——基于重构概率的变分自编码VAE代码实现详细解释 28. Unravel Anomalies: An End-to-end Seasonal-Trend Decomposition Approach for Time Series Anomaly Detection 论文名称UNRAVEL ANOMALIES: AN END-TO-END SEASONAL-TREND DECOMPOSITION APPROACH FOR TIME SERIES ANOMALY DETECTION 会议名称ICASSP 2024 论文地址ieee | 阿里云盘 | PPT 下载https://sigport.org/sites/default/files/docs/TADNet%20Oral.pdf 源码地址https://github.com/zhangzw16/TADNet 28.1 论文概述 论文很短除去引用只有4页我们可以很快地过一遍论文大体内容 28.2 相关技术 见原文第1节 New insights. New insights时间序列本质上由多个重叠模式组成季节性、趋势和残差。这种重叠性质可能会掩盖不同类型的异常值。使用季节性-趋势分解STD的优势在图 1 中有生动的展示它显示了如何通过将其分离为各自的成分来有效地分离异常值。通过利用 STD 的能力我们的方法可以独特地分解这些复杂的复合模式。此外根据文献[4] 提出的分类法我们发现不同类型的数据异常都可以与相应的组件相关联季节性异常与季节性成分、趋势异常与趋势成分以及点异常与剩余成分。 尽管现有研究已将时间序列分解纳入 TAD 任务但这些方法并不遵循端到端的训练方式。具体而言它们要么依赖于预定义的分解算法需要精细的参数调整要么仅将分解用于数据预处理。为了克服端到端训练缺乏监督信号的问题我们引入了一种新的两步训练方法。最初我们生成一个模拟真实世界数据分解成分的合成数据集。首先我们在这个合成数据集上为分解任务预训练我们的模型。该模型随后根据真实世界的异常数据进行微调从而增强时间序列分解和异常检测。 时间序列异常检测Time-Series Anomaly Detection 考虑一个长度为 T \mathcal{T} T 的时间序列数据集 T ∈ R T × D T \in \mathbb{R}^{\mathcal{T}\times D} T∈RT×D当 D 1 D1 D1 时称为单变量时间序列当 D 1 D1 D1 时称为多变量时间序列。TAD 任务的主要目标是在 T \mathcal{T} T 中识别异常并生成输出序列 Y \mathcal{Y} Y。 Y \mathcal{Y} Y 中的每个元素对应于 T \mathcal{T} T 中相应数据点的异常状态其中 1 表示异常。为此使用基于点的方法Point-wise score method产生异常分数系列 S { s 1 , s 2 , . . . , s m } S\{s_1,s_2,...,s_m\} S{s1​,s2​,...,sm​} 其中 s i ∈ R s_i \in \mathbb{R} si​∈R。然后通过独立阈值处理将这些分数转换为二进制异常标签 Y \mathcal{Y} Y 。 季节性趋势分解 Seasonal-Trend Decomposition 对于一个单变量时间序列 x ∈ R T x \in \mathbb{R}^\mathcal{T} x∈RT它的结构成分包括趋势性和季节性表示为 x t τ t s t r t x_t\mathcal{\tau}_ts_tr_t xt​τt​st​rt​其中 τ t \tau_t τt​、 s t s_t st​ 和 r t r_t rt​ 分别表示在第 t t t 个时间戳的趋势、季节性和剩余部分。 TAD 任务的方法的主要重点在于对单变量时间序列进行季节性-趋势分解。当前文献强调了评估每个变量以提高预测准确性的优点。因此多元时间序列中的每个变量都会经历独立分解而整体异常检测策略会考虑其多元本征特性。 时域音频分解Time-domain Audio Separation此任务可以描述为给定混合的离散波形 x t ∈ R T x_t\in\mathbb{R}^{T} xt​∈RT对源数据 C \mathcal{C} C s t ( 1 ) , … , s t ( C ) ∈ R T s_t^{(1)},\ldots,s_t^{(C)}\in \mathbb{R}^{T} st(1)​,…,st(C)​∈RT 进行评估时 。从数学上讲这表示为 x t ∑ i 1 C s t ( i ) x_t\sum_{i1}^C s_t^{(i)} xt​∑i1C​st(i)​。 单声道音频源分离领域已经通过各种深度学习模型取得了进展。TasNet 在此领域引入了端到端学习的概念。Conv-TasNet 通过集成卷积层进一步发展了这种方法。DPRNN 专注于通过循环神经网络改善长期建模。最近像 SepFormer 这样的架构整合了注意力机制。 时域音频分离的理论框架与季节性趋势分解任务表现出惊人的相似性从而使我们思考在这些领域之间可能的方法转换以改进时间序列分解和异常检测。 28.3 核心方法 28.3.1 总体架构 Overall Framework TADNet 的总体流程图如图 2 所示。预处理包括数据标准化 normalization 和分段segmentation。首先将输入数据被归一化到 [0,1) 范围内。分段采用长度为 P P P 的滑动窗口方法将归一化的 T \mathcal{T} T 转换为长度为 P P P 的非重叠块(non-overlap blocks)表示为 D X 1 , X 2 , … , X N \mathcal{D}{\mathcal{X}_1,\mathcal{X}_2,\ldots,\mathcal{X}_N} DX1​,X2​,…,XN​。值得注意的是虽然分段提供了更灵活的方法来管理较长的序列但它不会影响结果。 在 TADNet 主干网中我们利用TasNet架构及其语音speech separation分离的变体。将季节和趋势分量视为不同的音频信号如图 2 所示TasNet 有助于有效的 STD。 由于训练只使用正常样本异常情况通常会破坏重构过程。为了检测这些异常值我们计算重构误差表示为 S c o r e ( t ) ∥ T t , : − T t , : ∥ 2 Score(t) \parallel \mathcal{T}_{t,:}-\mathcal{T}_{t,:} \parallel_2 Score(t)∥Tt,:​−Tt,:​∥2​其中 ∥ ⋅ ∥ 2 \parallel \cdot \parallel_2 ∥⋅∥2​ 表示 L2 范数。 28.3.2 TADNet 主要部分 编码器接受单变量时间序列 x d ∈ R P x_d\in\mathbb{R}^P xd​∈RP其中 d 1 , 2 , … , D d1,2,\ldots,D d1,2,…,D 来源于多元变量 X i \mathcal{X}_i Xi​。它将该序列划分为多个重叠窗口frames。每个窗口具有长度 L L L并且与相邻窗口重叠 S S S 个步长。然后按顺序将这些窗口合并为 X d ∈ R L × K \mathbf{X}_d\in\mathbb{R}^{L\times K} Xd​∈RL×K。通过随后的线性变换编码器将 X d \mathbf{X}_d Xd​映射到潜在空间 E U X d \mathbf{E}\mathbf{U}\mathbf{X}_d EUXd​。矩阵 U ∈ R N × L \mathbf{U} \in \mathbb{R}^{N\times L} U∈RN×L 的行(rows) 包含可训练的转换基transformation而 E ∈ R N × K \mathbf{E} \in \mathbb{R}^{N\times K} E∈RN×K 表示输入时间序列在潜在空间中的特征表示。 分离器接收编码表示并负责为分解的每个组件生成掩码masks。形式上表示为 { M T , M s , M r } F sep ( E ; θ ) \{\mathbf{M_\mathcal{T}},\mathbf{M_\mathcal{s},\mathbf{M_\mathcal{r}}}\} \mathcal{F}_{\text{sep}}(\mathbf{E;\theta}) {MT​,Ms​,Mr​}Fsep​(E;θ) 其中 M T \mathbf{M_\mathcal{T}} MT​ M s \mathbf{M_\mathcal{s}} Ms​ 和 M r \mathbf{M_\mathcal{r}} Mr​分别表示趋势、季节性和剩余成分的掩码。在这里 F sep \mathcal{F}_\text{sep} Fsep​ 表示分离子网络可以使用各种架构如CNNRNN或者Transformer 来实现。利用这些掩码全局特征 E \mathbf{E} E 中每个目标的嵌入是 E τ M τ ⊙ E , E s M s ⊙ E , E r M r ⊙ E (1) \mathbf{E}_\tau\mathbf{M}_\tau \odot \mathbf{E}, \quad \mathbf{E}_s\mathbf{M}_s \odot \mathbf{E}, \quad \mathbf{E}_r\mathbf{M}_r \odot \mathbf{E} \tag{1} Eτ​Mτ​⊙E,Es​Ms​⊙E,Er​Mr​⊙E(1) 通过相应掩模的逐点乘积来实现。 解码器架构镜像编码器采用分离器生成的屏蔽嵌入。这些嵌入通过线性变换 V V V 被映射回时域。 S ^ τ E τ T V , S ^ s E s T V , S ^ r E r T V (2) \hat{\mathbf{S}}_\tau\mathbf{E}_\tau^T \mathbf{V}, \quad \hat{\mathbf{S}}_s\mathbf{E}_s^T \mathbf{V}, \quad \hat{\mathbf{S}}_r\mathbf{E}_r^T \mathbf{V} \tag{2} S^τ​EτT​V,S^s​EsT​V,S^r​ErT​V(2) 这里 V ∈ R N × L V\in \mathbb{R}^{N \times L} V∈RN×L 有 N N N 个解码器基 (decoder bases)。重构的趋势、季节性和余数表示为 S ^ T \hat{\mathbf{S}}_\mathcal{T} S^T​、 S ^ S \hat{\mathbf{S}}_\mathcal{S} S^S​ 和 S ^ r \hat{\mathbf{S}}_\mathcal{r} S^r​是从它们各自的嵌入中导出的。输出时域信号通过重叠和相加运算overlap-and-add operation获得 T d ^ \hat{\mathcal{T}_d} Td​^​ s d ^ \hat{\mathcal{s}_d} sd​^​ r d ^ \hat{\mathcal{r}_d} rd​^​ 。 28.3.3 合成数据集 在异常检测中现实世界的数据通常缺乏 STD 所必需的微妙趋势和季节性模式。为了使 TADnet 具有鲁棒的 STD 能力我们构建了一个合成数据集。该数据集经过精心设计具有复杂的季节性和趋势变化、异常值和噪声以模拟真实环境如图 1 所示。确定性和随机趋势都被用来构造趋势和季节成分然后对其进行归一化以保持零均值和单位方差。 趋势Trend 确定性趋势使用具有固定系数的线性趋势函数生成 τ t ( d ) β 0 β 1 ⋅ t \tau^{(d)}_t\beta_0 \beta_1 \cdot t τt(d)​β0​β1​⋅t其中 β 0 \beta_0 β0​ 和 β 1 \beta _{1} β1​ 是可调参数。 随机趋势成分通过 ARIMA (0,2,0) 过程进行建模并按如下方式整合到趋势模型中 τ t ( s ) ∑ n 1 t n X n \tau^{(s)}_{t} \sum_{n 1}^{t} n X _{n} τt(s)​∑n1t​nXn​ 其中 X t X_t Xt​ 是服从正态分布的白噪声项满足 Δ 2 τ t ( s ) X t \Delta ^ {2} \tau^{(s)}_{t} X_t Δ2τt(s)​Xt​。 周期性Seasonal 确定性的季节性成分结合了各种类型的周期信号。它包括振幅、频率和相位随时间变化的正弦波以及振幅、周期和相位各不相同的方波。 对于缓慢变化的随机序列季节性成分由重复的周期组成一个缓慢变化的趋势系列 τ t ( s ) \tau_t^{(s)} τt(s)​。 这个系列是由趋势生成算法生成的以确保在周期之间平滑过渡。 每个周期都由周期 T 0 T_0 T0​ 和相位 ϕ \phi ϕ 唯一地刻画出来。 随机季节性分量因此被定义为 s t τ mod ( t ϕ , T 0 ) ( s ) s_t \tau^{(s)}_{\text{mod}(t\phi,T_0)} st​τmod(tϕ,T0​)(s)​ 。 为了丰富数据集我们对周期长度和振幅进行了一些微调包括重新采样单个周期并对周期内的值进行缩放以实现更多样化和泛化的信号分解。 余项Remainder 通过使用具有可调方差的白噪声过程来定义余项部分。 为了增强分解模型对异常值的鲁棒性并确保稳定的分解性能我们按照文献 [4] 中概述的方法向合成数据集中注入了部分异常值。 28.3.4 两阶段训练策略Two-Phase Training Strategy 我们为TADnet提出了一个两阶段训练策略以确保其在时间序列分解和异常检测中的有效性。 在第一阶段TADnet 在合成数据集上进行预训练重点是时间序列分解。相应的损失函数由下列公式给出 L d e c ∑ d 1 D ( ∥ τ d − τ ^ d ∥ 2 2 ∥ s d − s ^ d ∥ 2 2 ∥ r d − r ^ d ∥ 2 2 ) (3) L_{\mathrm{dec}}\sum_{d1}^D\left(\left\|\tau_d-\hat{\tau}_d\right\|_2^2\left\|s_d-\hat{s}_d\right\|_2^2\left\|r_d-\hat{r}_d\right\|_2^2\right) \tag{3} Ldec​d1∑D​(∥τd​−τ^d​∥22​∥sd​−s^d​∥22​∥rd​−r^d​∥22​)(3) 这里 τ d \tau_d τd​、 s d s_d sd​ 和 r d r_d rd​ 分别表示第 d d d 维度的实际季节性、趋势性和残差分量而 τ d \tau_d τd​、 s d s_d sd​ 和 r d r_d rd​ 则分别表示其预测值。 在第二阶段使用一个真实的TAD数据集来微调TADnet。 这个阶段强调了在分解后准确重建原始时间序列这是有效检测异常的关键要求。 该阶段的重点是整体重构精度的损失函数如下 L r e c ∑ d 1 D ∥ x d − ( τ ^ d s ^ d ) ∥ 2 2 (4) L_{\mathrm{rec}}\sum_{d1}^D\left\|x_d-\left(\hat{\tau}_d\hat{s}_d\right)\right\|_2^2 \tag{4} Lrec​d1∑D​∥xd​−(τ^d​s^d​)∥22​(4) 这里 x d x_d xd​ 表示在第 d d d 维上的原始时间序列 τ ^ d s ^ d \hat{\tau}_d \hat{s}_d τ^d​s^d​ 是其预测重构。 28.4 源码分析 源码地址为https://github.com/zhangzw16/TADNet/tree/main 这里只对项目各个 .py 文件的功能概述 pot: constants.py 主要用于配置和初始化一个时间序列异常检测任务的参数pot.py 用于评估时间序列异常检测模型的性能包括采用Point-Onset (POT) 方法进行异常检测并计算相关的评估指标。spot.py 实现了 SPOT 、 biSPOT、dSPOT、bidSPOT 四个算法在 pot.py 文件中使用。 src: data.py 数据读取与格式转换等用于处理音频数据的PyTorch自定义数据集和数据加载器。loss.py 损失函数、损失的计算相关函数mask.py 该函数用于在给定数组arr中随机选择一个长度为len0的子数组并将该子数组用零填充然后返回填充后的数组和选择的子数组的起始和结束位置。models.py 模型核心相关内容应用循环神经网络RNN和Sepformer进行音频信号处理。preprocess.py 主要实现了对指定目录下的.npy文件进行预处理的功能separate.py 一个使用FaSNet_base模型进行时间序列分离的程序。solver.py 类用于训练和验证深度学习模型。它接收数据加载器、模型、优化器和参数然后在多个epoch上执行训练和交叉验证。训练过程中每过一定epoch会调整学习率并保存最佳验证性能的模型。_run_one_epoch方法处理单个epoch的训练或验证包括前向传播、计算损失和在训练时反向传播。test.py 测试类train.py 一个命令行接口用于使用FaSNet_base模型进行时间序列异常检测网络的训练。utils.py 相关工具类 synthetic合成数据 anomaly.py 用于生成包含异常子信号的序列。类初始化时接受两个参数amplitude表示序列的振幅默认为1type表示异常类型可选值为’point’、‘interval’、‘contextual’、‘collective’、‘shapelet’、‘noise’。类中的generate方法接受一个时间序列作为输入并根据设定的异常类型在时间序列中添加相应的异常子信号最后返回生成的异常序列。const.py 相关参数常量。generate.py 生成具有给定信息的完整序列。main.py 这段代码主要实现了从给定的pk_info信息中生成时间序列数据并将其分为趋势、噪声、季节性和完整序列四类然后将这些序列保存到指定的文件夹中。noise.py 用于生成具有给定振幅的噪声序列season.py 周期性相关代码trend.py 趋势性相关代码 run.py: 执行入口 28.5 Ablation Study (消融学习) 论文中提出的Ablation Study是一种系统性的实验方法用于评估模型或算法中各个组成部分对整体性能的贡献。通过有选择地移除或替换模型的部分组件例如在TADNet模型中的Separator、Decomposition模块或数据增强预训练步骤并观察模型性能的变化特别是使用F1分数作为评价指标研究者能够量化每个部分的重要性。 在TADNet的Ablation Study中进行了以下实验 w/o Sep移除了模型中的Separator分隔器导致所有数据集上的F1分数显著下降显示了Separator在区分和处理时间序列复杂模式中的关键作用。 w/o Decomp将分解模块(Ldec)替换为一个简单的重建模块(Lrec)导致性能降低强调了季节趋势分解在异常检测任务中的有效性。 w/o Augment省略了在合成数据集上的预训练步骤降低了模型在所有数据集上的表现证明了预训练对于提升模型在真实世界数据上的表现至关重要。 Iterative采用迭代训练方法在分解和异常检测任务之间交替进行训练虽然在特定数据集如WADI上提高了F1分数至92.06%但考虑到增加的计算成本作者选择了预训练-微调范式作为主要方法并认为迭代训练的进一步探索可以留作未来工作。 通过这些Ablation Study研究者不仅验证了TADNet各组成部分的有效性而且为模型的优化和调整提供了指导同时也为读者展示了如何在自己的研究中实施类似的实验来深入理解模型内部机制和组件的功能。 28.5 本章总结 论文提出了一种名为TADNet的模型用于有效识别时间序列中的异常。该模型通过将复杂的时间序列数据分解为季节性、趋势和残差三个组成部分来简化分析并与各类异常关联从而提升检测性能。 TADNet采用两阶段训练策略。首先在合成数据集上进行预训练该数据集包含了模拟的季节性、趋势和残差组件以及故意注入的异常数据以增强模型鲁棒性。预训练阶段的损失函数旨在最小化每个分解组件季节性、趋势和残差的均方误差。其次模型在真实世界的时间序列异常检测TAD数据集上进行微调重点是精确重构原始时间序列这对于有效异常检测至关重要。此阶段的损失函数关注于整体重构精度。 论文还介绍了合成数据集中各组成部分的生成方法如确定性季节性成分结合了不同幅度、频率和相位的正弦波及方波慢变随机序列的周期性趋势则通过特定算法生成以确保周期间平滑过渡。此外为了丰富数据集并提高信号分解的多样性和泛化能力对周期长度和振幅进行了微调。 论文可以参考的地方 端到端季节趋势分解STDTADNet利用季节趋势分解将时间序列拆解成季节性、趋势和残余三个部分这有助于单独分析和理解每个部分的异常简化了复杂时间序列的分析过程。 两阶段训练策略首先在合成数据集上预训练模型以学习如何有效地分解时间序列然后在真实世界的异常检测数据集上微调平衡了有效分解与精确异常检测的需求。这种策略可以作为新算法设计中数据处理和模型优化的重要参考。 合成数据集生成论文中详细介绍了一种合成数据集的生成方法包括慢变随机序列、包含各种周期信号的季节性组件以及残差组件的白噪声过程甚至在其中注入异常数据以增强模型的鲁棒性。这种方法可以用来为新算法设计提供高质量的训练数据尤其是在缺乏足够标注的真实数据情况下。 Ablation Study详情请参考原论文 4.1节 Ablation Study 通过对模型不同组件如分离器、分解模块、数据增强步骤和迭代训练策略的消融实验论文揭示了每个部分对模型性能的重要性。在设计新算法时可以借鉴这些发现来决定哪些组件是必不可少的以及它们如何影响最终性能。 Reconstruction-based Anomaly Detection前面提到的 Donut / Bagel / LOF-VAE 等都是这类算法通过计算重构误差来检测异常该方法简单直观且有效。模型预测的重构误差与实际异常区域高度相关表明这种方法能准确识别异常同时减少误报。 可解释性TADNet不仅提高了检测准确性还提供了清晰的分解可视化使得结果具有更强的可解释性。新算法设计时考虑增强模型的解释能力有助于用户理解和信任检测结果。 适应多变量时间序列尽管主要针对单变量时间序列设计TADNet也扩展到了多变量场景。虽然在某些复杂多变量情况下可能面临限制但其框架为处理更广泛的数据类型提供了基础。 希望能帮到各位小伙伴 ~ 万分感谢各位的点赞、评论与关注支持 ~ Smileyan 2024.05.20 00:17
http://www.hkea.cn/news/14589259/

相关文章:

  • 制作公司网站流程wordpress主题怎么使用教程
  • 霍州做网站网站站点文件夹权限设置
  • 英文企业网站源码 asp网站前期设计
  • 中国建设银行网站客户注册网站建站上市公司
  • 沅江网站设计产品推广方案有哪些
  • 成都网站建设上市公司年会活动方案策划
  • 专业电子网站建设老房改造 装修公司
  • 广水市建设局网站广告设计公司装修案例
  • 网站开发和app开发wordpress无版权主题
  • 做网站公司职务网络宣传
  • 建筑工程网站搭建wordpress搭建短视频网站
  • 郑州最好的网站建设最新设计装修
  • 在那些网站做宣传更好wordpress动态图片不显示
  • 免费发布信息网站网址大全wordpress.exe
  • 免费做简易网站高端品牌推广方案
  • 网站建设项目登记表做水果生意去哪个网站
  • 济南网站建设和维护ps教程自学网官网
  • 株洲网站建设优化企业广东建设项目备案公示网站
  • 南宁建设信息网站龙华区网站建设
  • 做企业网站为什么要服务器呢二级域名怎么注册
  • 网站简约式布局特点dw做链接网站无法显示该页面
  • 销售员做网站深圳餐饮设计公司排名
  • 从零搭建企业网站广西建设厅官方网站电话
  • 烟台网站制作软件游民星空是用什么做的网站
  • 公司制作网站需要军事最新新闻播报
  • 淡水网站建设网站监控怎么做
  • 村级网站建设 不断增强网站排名优化
  • 网站规划建设案例网站数据库是什么意思
  • 网站建设需要多少钱小江网页设计南阳做网站优化价格
  • 什么网站个人可以建设营销app