【新功能上线】因子研究看板和因子分析功能

新手专区
标签: #<Tag:0x00007fc57c7e6a00>

(iQuant) #1

因子分析是因子筛选的重要步骤,也是决定量化策略效果的关键。为便于大家快速、高效地进行因子监控和因子分析,平台新上线了因子研究看板和因子分析模版。

一、 因子研究看板介绍

通过点击上方导航栏中的因子研究按钮进入因子看板界面。通过因子看板功能,我们可以每日对各大类因子的最近收益情况进行比对监控,方便我们在构建策略时进行合理的因子选取和组合。

看板界面包含了多个选项:

  • 分类选项中我们预先定义了估值、成长、财务质量、杠杆、规模、动量、波动率、流动性、资金流、每股因子、技术指标因子、WorldQuant因子和短周期等多个类别的因子。
  • 股票池选项中我们预先定义了全市场/沪深300/中证500/中证800股票池。
  • 回测周期可以选择近1年/近3年。
  • 调仓周期默认按30个自然日轮仓。
  • 过滤股票选项中默认过滤了ST、涨跌停和新股。
  • 手续费和滑点默认在每个轮仓日扣除千分之1.3的印花税和佣金。
  • 默认按因子值从小到大分为五个分位组别,最低分位表示因子值最小的组合,最高分位表示因子值最大的组合。
  • 平台对因子数据统一提供缺失值处理(dropna)、去极值(中位数法+3倍标准差)、标准化处理、行业中性化、市值中性化处理(行业哑变量和对数市值回归计算残差)。其中,市值因子仅行业中性化处理。
  • 收益率统计展示默认展示昨日收益率、近1周1收益率和近1月收益率。
    平台每日会计算更新这些选项组合对应的因子评价指标并形成看板。看板中的因子评价指标包含每个因子最高/最低分位组合的昨日收益率、近1周收益率和近1月收益率以及回测周期阶段内的因子IC序列均值、IR值和拥挤度及估值。

我们通过点击看板上每个因子的因子名称链接,可以进入到下图所示的因子详情界面。

在因子详情界面中包括:

  • 收益分析:展示了因子的分组收益/多空收益时间序列的阶段收益率、最大回撤、夏普比率、收益波动率指标、因子分组收益净值曲线、因子多空(最低分位-最高分位)日收益和净值曲线。
  • 因子分布:原始因子柱状图,去极值、标准化、行业中性化、市值中性化处理处理后的因子柱状图
    ,因子行业分布和因子市值分布图。
  • IC分析:包括因子IC序列(期初因子和当期收益相关性),IC序列的均值和IC序列的标准差,以及IR值=IC序列的均值/IC序列的标准差, |IC| >=0.02比率,IC信号衰减分析:当期因子与滞后n期收益率的相关性,不同换仓周期买入信号的重合度。重合度越高反应因子排序变动大,轮仓交易成本越大。
  • 因子估值分析:展示因子的各分组市净率中位数,反映了所选股票的估值高低。
  • 因子拥挤度分析:用换手率来表征分组股票的交易拥挤程度,因子拥挤度越高表示换手率越高。
  • 因子值最大/最小的20只股票:展示了最近轮仓日按因子大小排序因子值最大的20只股票和因子值最小的20只股票。

由于计算资源的限制,平台针对看板默认的配置组合进行了每日数据更新,如果自定义分析时间段或是改变轮仓周期、修改因子处理方式等,可以通过因子分析模版更灵活地实现。

二、 因子分析模版介绍

我们可以通过点击因子看板中的某个因子,进入因子详情界面,点击右上方的自定义分析按钮打开一个因子分析模版。

也可以通过新建一个空白可视化策略,如下图所示,拖入输入特征列表和因子分析模块。我们可以在输入特征列表中通过表达式引擎,分行输入多个要分析的单个因子表达式,例如:return_5、pe_ttm_0,并连接到因子分析模块。

我们可以看到因子分析模块的属性栏中包含如下参数:

  • 分析报告标题:绘图所用的分析报告标题,默认输出的标题名为“因子分析”+因子表达式
  • 开始日期和结束日期:设置因子分析的起止日期
  • 调仓周期:设置按因子排序进行组合调仓的周期,eg.设置为22表示每22个交易日按因子值排序并分组
  • 股票池:设置分析的股票池范围,以便在给定的股票池范围按因子值大小排序分组。可选的股票池范围包括:全市场、沪深300、中证500和中证800
  • 分组数量:设置按单因子排序后的分组数量,分组数量越大则因子分析越精细分组之间的收益差异越大,更利于观察因子头部/尾部的收益特征,但计算耗时也越长,每组股票的容量也越小。
  • 手续费及滑点:在每个调仓周期扣除换仓的手续费和滑点成交金额总费率。为了方便计算,这里默认每次轮仓按全仓金额扣除千分之一点六。
  • 移除涨跌停股票:设置是否在股票池中移除涨跌停股票。
  • 移除ST股票:设置是否在股票池中移除ST股票。
  • 移除新股:设置是否在股票池中移除新股。
  • 因子去极值和标准化:设置因子在排序分组前是否进行去极值和标准化处理,主要为了排除异常值对排序的影响,标准化使得不同因子之间的数据范围大致相同。
  • 中性化风险因子:设置因子在排序分组前是否进行中性化处理,默认对因子进行行业哑变量和对数市值多元线性回归,将残差作为中性化后的因子值。这样处理通常是避免单纯按因子排序造成的行业或公司大小的偏向性。对于市值因子做中性化处理时无需勾选市值选项,仅对行业进行回归计算残差即可。
  • 输出指标:勾选所要输出的结果图标选项,包含了:
    基本特征分析


    基本特征分析包括了因子原始值和经过去极值、标准化、中性化处理后因子值的直方分布图,支持图表下载。
    可以通过因子直方图分布来观察是否因子本身分布具有左/右偏等特性,可通过对数/平方根等函数对因子表达式进行调整,因为在数据分布的偏度和峰度影响下,可能会把过量的数据认定为异常点。当多个因子的分布都为近似正态分布时,基于均值-标准差标准化得到的zscore 才有可比性。否则样本偏度和峰度的影响会使得个股在某一个因子上的得分明显偏大或偏小,其在多因子中的效用被显著放大或缩小。此外,因子收益率由横截面回归得到,其显著性检验有赖于残差项的正态分布假设,虽然线性回归对解释变量与被解释变量的分布没有要求,但当解释变量和被解释变量满足正态分布时,更容易得到符合正态分布的残差。

    分组收益分析


    分组收益展示了每个轮仓周期按因子排序分组,买入并持有各组股票所获取的累计净值曲线。每个轮仓周期中,因子值最小的一组股票为最小分位组,因子值最大的一组股票为最大分位组。同时展示了做多最大分位组股票同时做空因子值最小一组股票所获取的多空组合累计收益率曲线,通过计算 多空组合的日收益率 = (最大分位组股票日均收益率-最小分位组股票日均收益率) / 2 ,然后计算累计净值得到。同时,在上方展示了最小分位组合、最大分位组合、多空组合的回测期累计收益率、最大回撤、夏普比率、收益波动率和昨日、近1周、近1月、近3月、近1年的收益率数值。通过分析各组收益曲线的发散程度,可以判断因子是否显著具备线性区分股票的能力、以及因子方向等关键信息。

    IC分析


    IC值是每个轮仓周期期初因子值与因子当期收益率相关性分析,绝对值越大说明因子与当期收益率的相关性越显著。这里展示了回测阶段内,每个轮仓周期的IC值并进行了时序展示,计算了IC绝对值的均值和标准差,同时计算了IR = IC序列均值/IC序列标准差 用来刻画因子与收益率相关性的稳定程度 。

    行业分布分析


    行业分布展示了在给定回测时间阶段范围内,去极值、标准化和中性化处理后的因子数据按行业的分布,包括每个行业中处理后因子数据的最大值/上四分位/中位数/下四分位/最小值。

    市值分布分析


    市值分布展示了在给定回测时间阶段范围内,去极值、标准化和中性化处理后的因子数据按市值大小的分布,这里按照市值大小划分为超小型、小型、中型、大型和超大型共五个区间进行展示。包括每个市值组别中处理后因子数据的最大值/上四分位/中位数/下四分位/最小值。

    PB估值分析


    PB估值分析展示了按处理后的因子数据线性分组后,每组股票的市净率中位数,PB估值一定程度上反映了因子的估值程度,我们倾向于通过因子线性分钟能够构建出一个组合,该组合个股PB值较低,以致整体组合的PB值也较低,对于股票多头而言,买入估值处于洼地的组合是更优的选择。同时,我们可以使用该指标进行因子择时,当该因子处于低估值时进行超配,反之,减少配置。

    换手率分析


    换手率是反映因子拥挤程度的另一个指标,通过计算各分位组股票的换手率表征股票的博弈剧烈程度,换手率越高说明因子拥挤度越高,可能发生交易踩踏导致因子的快速失效,对于预测因子失效具有一定的参考意义。

    信号重合度分析


    对最小和最大分位两组股票,计算了当期和滞后N期所选股票的重合度,重合度高说明因子的排序变动慢、换手率较低即轮仓交易成本较低,反之重合度低说明因子的排序变动快、换手率较高即轮仓成本较高。

    股票筛选


    给出了最近一期轮仓日依据处理后的因子排序选出的最大分位和最小分位股票池。

    多因子相关性分析

    在特征列表中输入多个因子时,可勾选此选项来计算多个因子时间序列之间的相关性。


    如图所示,展示了不同因子时间序列的相关系数,通过相关系数方便我们后续对因子进行相关性分组,尽量避免模型中多个高度相关因子的共线性造成因子冗余,进而提高模型对收益的解释能力和鲁棒性,提高收益预测能力。
    同时,提供了多个因子最大/小分位组/多空收益的比对图、IC序列比对图、PB估值序列比对图和拥挤度比对图图,以及各因子最大/小分位组在最近1月、最近1年和回测时间内的累计收益率,以及回测时间段内的IC均值和IR值、最新拥挤度和最新估值。



本文介绍了平台新上线了因子研究看板和因子分析模版,解读了平台的因子分析数据预处理流程和相关分析指标,后续我们还将提供因子追踪和因子生成功能,方便大家通过因子分析模版自定义因子并监控因子表现。


因子分析问题
平台能不能出个模拟实盘运行时回测过大就重新回测的例子
(wujunjun) #2

因子研究这个模块有问题啊,没有输出内容


(yangziriver) #3

有了这些新功能,因子分析、选择的效率会更高了。赶紧试试。


(iQuant) #4

重启策略开发环境试一下,还有问题将问题策略分享至社区看下呢:


(NIKOBELLIC) #5

请问在点开因子过后,为什么看不到自定义分析的按钮?


(WoodMan2019) #6

几个问题:
1是看不到自定义分析的按钮.
2某些因子能给出表达式吗?比如短周期191因子,不然自定义分析里怎么分析这些因子
3.自定义的因子怎么使用因子分析功能


(iQuant) #7

收到提问,已提交至策略工程师,会尽快进行回复。


(yangziriver) #8

因子分析模板使用出现问题 我用的因子是 rank_return_0 时间20170101-20200303 其它因子也不行

WARNING: unknown fields: [‘全部’]


(iQuant) #9

应该可以跑了吧?

克隆策略

    {"Description":"实验创建于2020/3/5","Summary":"","Graph":{"EdgesInternal":[{"DestinationInputPortId":"-310:features","SourceOutputPortId":"-326:data"}],"ModuleNodes":[{"Id":"-310","ModuleId":"BigQuantSpace.factorlens.factorlens-v1","ModuleParameters":[{"Name":"title","Value":"因子分析: {factor_name}","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"start_date","Value":"2017-01-01","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"end_date","Value":"2020-03-03","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"rebalance_period","Value":22,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"stock_pool","Value":"全市场","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"quantile_count","Value":5,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"commission_rate","Value":0.0016,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"drop_price_limit_stocks","Value":"True","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"drop_st_stocks","Value":"True","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"drop_new_stocks","Value":"True","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"normalization","Value":"True","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"neutralization","Value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E8%A1%8C%E4%B8%9A%22%2C%22displayValue%22%3A%22%E8%A1%8C%E4%B8%9A%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%B8%82%E5%80%BC%22%2C%22displayValue%22%3A%22%E5%B8%82%E5%80%BC%22%2C%22selected%22%3Atrue%7D%5D%7D","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"metrics","Value":"%7B%22enumItems%22%3A%5B%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E8%A1%A8%E7%8E%B0%E6%A6%82%E8%A7%88%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E8%A1%A8%E7%8E%B0%E6%A6%82%E8%A7%88%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E5%88%86%E5%B8%83%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E5%88%86%E5%B8%83%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E8%A1%8C%E4%B8%9A%E5%88%86%E5%B8%83%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E8%A1%8C%E4%B8%9A%E5%88%86%E5%B8%83%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E5%B8%82%E5%80%BC%E5%88%86%E5%B8%83%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E5%B8%82%E5%80%BC%E5%88%86%E5%B8%83%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22IC%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22IC%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E4%B9%B0%E5%85%A5%E4%BF%A1%E5%8F%B7%E9%87%8D%E5%90%88%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22%E4%B9%B0%E5%85%A5%E4%BF%A1%E5%8F%B7%E9%87%8D%E5%90%88%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E4%BC%B0%E5%80%BC%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E4%BC%B0%E5%80%BC%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E6%8B%A5%E6%8C%A4%E5%BA%A6%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E6%8B%A5%E6%8C%A4%E5%BA%A6%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%9B%A0%E5%AD%90%E5%80%BC%E6%9C%80%E5%A4%A7%2F%E6%9C%80%E5%B0%8F%E8%82%A1%E7%A5%A8%22%2C%22displayValue%22%3A%22%E5%9B%A0%E5%AD%90%E5%80%BC%E6%9C%80%E5%A4%A7%2F%E6%9C%80%E5%B0%8F%E8%82%A1%E7%A5%A8%22%2C%22selected%22%3Atrue%7D%2C%7B%22value%22%3A%22%E5%A4%9A%E5%9B%A0%E5%AD%90%E7%9B%B8%E5%85%B3%E6%80%A7%E5%88%86%E6%9E%90%22%2C%22displayValue%22%3A%22%E5%A4%9A%E5%9B%A0%E5%AD%90%E7%9B%B8%E5%85%B3%E6%80%A7%E5%88%86%E6%9E%90%22%2C%22selected%22%3Atrue%7D%5D%7D","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"features","NodeId":"-310"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"user_factor_data","NodeId":"-310"}],"OutputPortsInternal":[{"Name":"data","NodeId":"-310","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":1,"Comment":"","CommentCollapsed":true},{"Id":"-326","ModuleId":"BigQuantSpace.input_features.input_features-v1","ModuleParameters":[{"Name":"features","Value":"\n# #号开始的表示注释,注释需单独一行\n# 多个特征,每行一个,可以包含基础特征和衍生特征,特征须为本平台特征\nrank_return_0","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"features_ds","NodeId":"-326"}],"OutputPortsInternal":[{"Name":"data","NodeId":"-326","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":2,"Comment":"","CommentCollapsed":true}],"SerializedClientData":"<?xml version='1.0' encoding='utf-16'?><DataV1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><Meta /><NodePositions><NodePosition Node='-310' Position='47.038177490234375,156.37498474121094,200,200'/><NodePosition Node='-326' Position='-25.961822509765625,44.70832824707031,200,200'/></NodePositions><NodeGroups /></DataV1>"},"IsDraft":true,"ParentExperimentId":null,"WebService":{"IsWebServiceExperiment":false,"Inputs":[],"Outputs":[],"Parameters":[{"Name":"交易日期","Value":"","ParameterDefinition":{"Name":"交易日期","FriendlyName":"交易日期","DefaultValue":"","ParameterType":"String","HasDefaultValue":true,"IsOptional":true,"ParameterRules":[],"HasRules":false,"MarkupType":0,"CredentialDescriptor":null}}],"WebServiceGroupId":null,"SerializedClientData":"<?xml version='1.0' encoding='utf-16'?><DataV1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><Meta /><NodePositions></NodePositions><NodeGroups /></DataV1>"},"DisableNodesUpdate":false,"Category":"user","Tags":[],"IsPartialRun":false}
    In [1]:
    # 本代码由可视化策略环境自动生成 2020年3月5日 15:49
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    m2 = M.input_features.v1(
        features="""
    # #号开始的表示注释,注释需单独一行
    # 多个特征,每行一个,可以包含基础特征和衍生特征,特征须为本平台特征
    rank_return_0"""
    )
    
    m1 = M.factorlens.v1(
        features=m2.data,
        title='因子分析: {factor_name}',
        start_date='2017-01-01',
        end_date='2020-03-03',
        rebalance_period=22,
        stock_pool='全市场',
        quantile_count=5,
        commission_rate=0.0016,
        drop_price_limit_stocks=True,
        drop_st_stocks=True,
        drop_new_stocks=True,
        normalization=True,
        neutralization=['行业', '市值'],
        metrics=['因子表现概览', '因子分布', '因子行业分布', '因子市值分布', 'IC分析', '买入信号重合分析', '因子估值分析', '因子拥挤度分析', '因子值最大/最小股票', '多因子相关性分析']
    )
    

    因子分析: rank_return_0

    因子表现概览

      累计收益 近1年收益 近3月收益 近1月收益 近1周收益 昨日收益 最大回撤 夏普比率 收益波动率
    最小分位 -61.55% -2.81% 8.59% 6.14% -2.68% 1.05% 66.28% -1.37 23.42%
    最大分位 -63.57% -13.42% 5.35% 3.27% -2.32% 0.90% 67.09% -1.49 22.73%
    多空组合 2.89% 6.08% 1.57% 1.41% -0.15% 0.08% 5.91% -1.08 2.35%

    基本特征分析

    IC分析

    IC均值

    -0.01

    IC标准差

    0.07

    IR值

    -0.08

    |IC| > 0.02比率

    70.59%

    买入信号重合分析

    因子估值分析

    因子拥挤度分析

    因子值最小的20只股票 (2020-03-03)

    股票名称 股票代码 因子值
    宜安科技 300328.SZA 0.0003
    恺英网络 002517.SZA 0.0005
    融捷健康 300247.SZA 0.0008
    宝通科技 300031.SZA 0.0011
    恒通股份 603223.SHA 0.0013
    国农科技 000004.SZA 0.0016
    金盾股份 300411.SZA 0.0019
    五洋停车 300420.SZA 0.0021
    斯莱克 300382.SZA 0.0024
    游族网络 002174.SZA 0.0026
    京威股份 002662.SZA 0.0029
    延江股份 300658.SZA 0.0034
    科斯伍德 300192.SZA 0.0040
    国网信通 600131.SHA 0.0042
    再升科技 603601.SHA 0.0045
    奥佳华 002614.SZA 0.0048
    盐津铺子 002847.SZA 0.0050
    英唐智控 300131.SZA 0.0053
    金科股份 000656.SZA 0.0056
    中钢国际 000928.SZA 0.0058

    因子值最大的20只股票 (2020-03-03)

    股票名称 股票代码 因子值
    佳云科技 300242.SZA 0.9669
    智慧松德 300173.SZA 0.9672
    日丰股份 002953.SZA 0.9677
    用友网络 600588.SHA 0.9680
    长园集团 600525.SHA 0.9683
    道恩股份 002838.SZA 0.9685
    金山办公 688111.SHA 0.9688
    复旦复华 600624.SHA 0.9691
    理邦仪器 300206.SZA 0.9693
    万孚生物 300482.SZA 0.9696
    新力金融 600318.SHA 0.9698
    鹏博士 600804.SHA 0.9701
    佳都科技 600728.SHA 0.9704
    朗新科技 300682.SZA 0.9706
    楚江新材 002171.SZA 0.9709
    上海新阳 300236.SZA 0.9712
    宁波高发 603788.SHA 0.9714
    天龙集团 300063.SZA 0.9717
    永悦科技 603879.SHA 0.9720
    亚士创能 603378.SHA 0.9746

    (yangziriver) #10

    好的,谢谢!


    (GOOSIE) #11

    请问输出的IC时序图如何将IC值保存下来呢?


    (公孙睿) #12

    请问老师:系统默认的分组数量为5组,是不是把全市场(3765只股票)总共分成5组,每组(3765÷5=753只)股票?


    (达达) #13

    是,你可以增加组数然后观察头部效应


    (公孙睿) #14

    达达老师,请问什么是“头部效应”?


    (达达) #15

    主要就是是否因子值最大/最小的组对应的收益曲线和别的组有显著区分度,分组收益分的越开说明因子的区分能力强,再有就是如果因子最小/最大的组不是最高收益曲线,那就说明这里的收益和因子之间有非线性规律,需要进一步用stockranker等算法来训练找到这种非线性关系。


    (公孙睿) #16

    明白了,谢谢老师!


    (zhrh88) #18

    单因子分析里,‘NoneType’ object is not subscriptable这个错误如何处理


    (iQuant) #19

    可以参考一下这篇帖子,将策略分享到社区,我们帮您看一下:遇到问题如何才能得到快速处理?


    (侯) #20

    IC和IR,是越大越好还是越小越好呢?


    (iQuant) #21

    越大越好